From 33ea96be959d79179f59ad1acf907c207742fc56 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 10 Jul 2017 18:04:00 -0400 Subject: [PATCH 01/59] adding stan_CARbym; print/summary methods work --- DESCRIPTION | 2 +- NAMESPACE | 2 + R/print-and-summary.R | 3 +- R/stan_CARbym.R | 73 ++++++++++++++++++ R/stan_spatial.fit.R | 168 ++++++++++++++++++++++++++++++++++++++++++ exec/spatial.stan | 118 +++++++++++++++++++++++++++++ 6 files changed, 364 insertions(+), 2 deletions(-) create mode 100644 R/stan_CARbym.R create mode 100644 R/stan_spatial.fit.R create mode 100644 exec/spatial.stan diff --git a/DESCRIPTION b/DESCRIPTION index 5aaa87a1e..516cb2009 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -59,4 +59,4 @@ LazyData: true NeedsCompilation: yes URL: https://groups.google.com/forum/#!forum/stan-users, http://mc-stan.org/ BugReports: https://github.com/stan-dev/rstanarm/issues -RoxygenNote: 5.0.1 +RoxygenNote: 6.0.1 diff --git a/NAMESPACE b/NAMESPACE index e4492b765..962f178a4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -93,6 +93,7 @@ export(product_normal) export(ranef) export(se) export(sigma) +export(stan_CARbym) export(stan_aov) export(stan_betareg) export(stan_betareg.fit) @@ -110,6 +111,7 @@ export(stan_lm.wfit) export(stan_lmer) export(stan_polr) export(stan_polr.fit) +export(stan_spatial.fit) export(student_t) export(waic) if(getRversion()>='3.3.0') importFrom(stats, sigma) else diff --git a/R/print-and-summary.R b/R/print-and-summary.R index 77c586b29..6242f6e97 100644 --- a/R/print-and-summary.R +++ b/R/print-and-summary.R @@ -92,6 +92,8 @@ print.stanreg <- function(x, digits = 1, ...) { cut_mat <- mat[, cut_nms, drop = FALSE] cut_estimates <- .median_and_madsd(cut_mat) } + if ("car" %in% class(x)) + nms <- setdiff(rownames(x$stan_summary), c("log-posterior", paste0("psi[", 1:length(x$y), "]"))) ppd_nms <- grep("^mean_PPD", nms, value = TRUE) nms <- setdiff(nms, ppd_nms) coef_mat <- mat[, nms, drop = FALSE] @@ -223,7 +225,6 @@ summary.stanreg <- function(object, pars = NULL, regex_pars = NULL, probs = NULL, ..., digits = 1) { mer <- is.mer(object) pars <- collect_pars(object, pars, regex_pars) - if (!used.optimizing(object)) { args <- list(object = object$stanfit) if (!is.null(probs)) diff --git a/R/stan_CARbym.R b/R/stan_CARbym.R new file mode 100644 index 000000000..5a20287f2 --- /dev/null +++ b/R/stan_CARbym.R @@ -0,0 +1,73 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2013, 2014, 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#' Bayesian CAR BYM models via Stan +#' +#' Spatial regression modeling with a conditional autoregressive (CAR). +#' +#' @export +#' + +stan_CARbym <- function(formula, + family = c("binomial", "poisson", "gaussian"), + data, + trials = NULL, + W, + ..., + prior = normal(), prior_intercept = normal(), + prior_PD = FALSE, + algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), + adapt_delta = NULL, + QR = FALSE) { + stan_function <- "stan_CARbym" + if (!requireNamespace("CARBayes", quietly = TRUE)) + stop("Please install the CARBayes package before using 'stan_CARbym.") + mc <- match.call(expand.dots = FALSE) + algorithm <- match.arg(algorithm) + family <- match.arg(family) + mf <- model.frame(mc, data) + Y <- array1D_check(model.response(mf, type = "any")) + X <- model.matrix(formula, data) + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, + trials = trials, + family = family, + stan_function, + ..., + prior = prior, + prior_intercept = prior_intercept, + prior_PD = prior_PD, + algorithm = algorithm, adapt_delta = adapt_delta, + QR = QR) + if (family == "binomial") + family <- binomial(link = "logit") + else if (family == "poisson") + family <- poisson(link = "log") + else if (family == "gaussian") + family <- gaussian(link = "identity") + fit <- nlist(stanfit, + algorithm, + data, + x = X, y = Y, + family, + formula, + model = mf, + call = match.call(), + stan_function = "stan_CARbym") + out <- stanreg(fit) + browser() + structure(out, class = c("stanreg", "car")) +} diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R new file mode 100644 index 000000000..dbd6d6088 --- /dev/null +++ b/R/stan_spatial.fit.R @@ -0,0 +1,168 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2013, 2014, 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#' @export +#' + +stan_spatial.fit <- function(x, y, w, + trials = NULL, + family = c("binomial", "poisson", "gaussian"), + stan_function, + ..., + prior = normal(), prior_intercept = normal(), + prior_PD = FALSE, + algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), + adapt_delta = NULL, + QR = FALSE) { + # check that W is appropriate + + algorithm <- match.arg(algorithm) + family <- match.arg(family) + + if (family == "gaussian") { + y_real <- y + y_int <- rep(0, length(y)) + link <- "identity" + trials <- rep(0, length(Y)) + family_num <- 1 + } + else { + y_real <- rep(0, length(y)) + y_int <- y + if (family == "binomial") { + link <- "logit" + family_num <- 3 + } + else { # poisson + link <- "log" + trials <- rep(0, length(Y)) + family_num <- 2 + } + } + + if (stan_function == "stan_CARbym") + mod <- 1 + else if(stan_function == "stan_CARleroux") + mod <- 2 + + sparse <- FALSE + x_stuff <- center_x(x, sparse) + for (i in names(x_stuff)) # xtemp, xbar, has_intercept + assign(i, x_stuff[[i]]) + nvars <- ncol(xtemp) + + ok_dists <- nlist("normal", student_t = "t", "cauchy") + ok_intercept_dists <- ok_dists + + prior_stuff <- handle_glm_prior(prior, nvars, link, default_scale = 2.5, + ok_dists = ok_dists) + for (i in names(prior_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_stuff[[i]]) + + prior_intercept_stuff <- handle_glm_prior(prior_intercept, nvars = 1, + default_scale = 10, link = link, + ok_dists = ok_intercept_dists) + names(prior_intercept_stuff) <- paste0(names(prior_intercept_stuff), + "_for_intercept") + for (i in names(prior_intercept_stuff)) # prior_{dist, mean, scale, df, autoscale}_for_intercept + assign(i, prior_intercept_stuff[[i]]) + + # QR decomposition for both x and z + if (QR) { + if (nvars <= 1) + stop("'QR' can only be specified when there are multiple predictors.") + else { + cn <- colnames(xtemp) + decomposition <- qr(xtemp) + sqrt_nm1 <- sqrt(nrow(xtemp) - 1L) + Q <- qr.Q(decomposition) + R_inv <- qr.solve(decomposition, Q) * sqrt_nm1 + xtemp <- Q * sqrt_nm1 + colnames(xtemp) <- cn + xbar <- c(xbar %*% R_inv) + } + } + + # pull out adjacency pairs from W + adj_fun <- function(W) { + W[upper.tri(W)] <- NA + out <- which(W == 1, arr.ind = TRUE) + return(out) + } + edges <- adj_fun(W) + + # need to use uncentered version + standata <- nlist(N = nrow(xtemp), + K = ncol(xtemp), + edges = edges, + E_n = nrow(edges), + family = family_num, + X = if (has_intercept) x[,-1] else x , # use xtemp + y_real = y_real, + y_int = y_int, + trials = trials, + shape_tau = 1, + shape_sigma = 1, + shape_nu = 1, + scale_tau = 1, + scale_sigma = 1, + scale_nu = 1, + loc_beta = rep(0,ncol(xtemp)), + scale_beta = rep(1,ncol(xtemp)), + loc_alpha = 0, + scale_alpha = 1, + has_intercept = has_intercept, + mod = mod) + + pars <- c(if (has_intercept) "alpha", "beta", if(mod == 1) "sigma", "tau", if(family == "gaussian") "nu", + "mean_PPD", if (mod < 2) "psi") + + stanfit <- stanmodels$spatial + + if (algorithm == "sampling") { + sampling_args <- set_sampling_args( + object = stanfit, + prior = prior, + user_dots = list(...), + user_adapt_delta = adapt_delta, + data = standata, + pars = pars, + show_messages = FALSE) + stanfit <- do.call(sampling, sampling_args) + } + else { + stop(paste("algorithm", algorithm, "is not supported.")) + } + check_stanfit(stanfit) + + if (QR) { + thetas <- extract(stanfit, pars = "beta", inc_warmup = TRUE, + permuted = FALSE) + betas <- apply(thetas, 1:2, FUN = function(theta) R_inv %*% theta) + end <- tail(dim(betas), 1L) + for (chain in 1:end) for (param in 1:nrow(betas)) { + stanfit@sim$samples[[chain]][[has_intercept + param]] <- + if (ncol(xtemp) > 1) betas[param, , chain] else betas[param, chain] + } + } + new_names <- c(if (has_intercept) "(Intercept)", + colnames(xtemp), "tau2", if(mod == 1) "sigma2", + if(family == "gaussian") "nu2", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) + stanfit@sim$fnames_oi <- new_names + browser() + return(structure(stanfit)) # return(structure(stanfit, prior.info = prior_info)) +} diff --git a/exec/spatial.stan b/exec/spatial.stan new file mode 100644 index 000000000..a63df5853 --- /dev/null +++ b/exec/spatial.stan @@ -0,0 +1,118 @@ +// CAR (BYM version i.e. IAR) +data { + int N; // number of regions + int K; // number of predictors (inc intercept) + matrix[N,K] X; // model matrix + int trials[N]; // binomial trials (0 1d array if not applicable) + int y_int[N]; // outcome + real y_real[N]; // outcome + int family; // family (1 = Gaussian, 2 = Poisson, 3 = Binomial) + int E_n; // number of adjacency pairs + int edges[E_n, 2]; // adjacency pairs + real loc_beta[K]; // priors + real scale_beta[K]; // priors + real shape_tau; // priors + real scale_tau; // priors + real shape_sigma; // priors + real scale_sigma; // priors + real shape_nu; // priors + real scale_nu; // priors + real loc_alpha; // priors + real scale_alpha; // priors + int has_intercept; + int mod; +} +transformed data { + real poisson_max = pow(2.0, 30.0); +} +parameters { + real alpha[has_intercept]; // intercept + vector[K] beta; // predictors on covariates (including intercept) + vector[N] theta_raw[mod == 1? 1 : 0]; // used for random effect (non-spatial) + vector[N-1] phi_raw; // used for random effect (spatial) + real tau; // variance i.e. tau^2 + real sigma; // variance i.e. sigma^2 + real nu[family == 1? 1 : 0]; // applies only if family is gaussian +} +transformed parameters { + vector[N] theta[mod == 1? 1 : 0]; // non-centered random effect (non-spatial) + vector[N] phi; // non-centered random effect (spatial) + theta[1] = sqrt(sigma) * theta_raw[1]; + phi[1:(N - 1)] = phi_raw; + phi[N] = -sum(phi_raw); + phi = phi * sqrt(tau); +} +model { + vector[N] eta; // linear predictor + spatial random effects + // model + if (has_intercept == 1) { + if (mod == 1) + eta = alpha[1] + X * beta + phi + theta[1]; + else if (mod == 2) + eta = alpha[1] + X * beta + phi; + } + else { + if (mod == 1) + eta = X * beta + phi + theta[1]; + else if (mod == 2) + eta = X * beta + phi; + } + if (family == 1) { + target+= normal_lpdf(y_real | eta, nu[1]); + target+= inv_gamma_lpdf(nu[1] | shape_nu, scale_nu); + } + else if (family == 2) { + target+= poisson_log_lpmf(y_int | eta); + } + else if (family == 3) { + target+= binomial_lpmf(y_int | trials, inv_logit(eta)); + } + // priors + if (mod == 1) + target+= - N * log(sqrt(tau)) - 0.5 * inv(tau) * dot_self(phi[edges[,1]] - phi[edges[,2]]); + else if (mod == 2) + reject("leroux model not supported") + if (has_intercept == 1) + target += normal_lpdf(alpha | loc_alpha, scale_alpha); + target+= normal_lpdf(beta | loc_beta , scale_beta); + target+= normal_lpdf(theta_raw[1] | 0, 1); + target+= normal_lpdf(phi_raw | 0, 1); + target+= inv_gamma_lpdf(tau | shape_tau, scale_tau); + target+= inv_gamma_lpdf(sigma | shape_sigma, scale_sigma); +} +generated quantities { + real mean_PPD = 0; + vector[N] psi; + if (mod == 1) + psi = theta[1] + phi; + else if (mod == 2) + psi = phi; + { + vector[N] eta; + if (has_intercept == 1) { + if (mod == 1) + eta = alpha[1] + X * beta + phi + theta[1]; + else if (mod == 2) + eta = alpha[1] + X * beta + phi; + } + else { + if (mod == 1) + eta = X * beta + phi + theta[1]; + else if (mod == 2) + eta = X * beta + phi; + } + for (n in 1:N) { + if (family == 1) + mean_PPD = mean_PPD + normal_rng(eta[n], nu[1]); + else if (family == 2) { + if (eta[n] < poisson_max) + mean_PPD = mean_PPD + poisson_log_rng(eta[n]); + else + mean_PPD = mean_PPD + normal_rng(eta[n], sqrt(eta[n])); + } + else if (family == 3) + mean_PPD = mean_PPD + binomial_rng(trials[n], inv_logit(eta[n])); + } + } + mean_PPD = mean_PPD / N; +} From 6feee4f0d8722922bd225d4e425455a037900474 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 10 Jul 2017 20:22:56 -0400 Subject: [PATCH 02/59] get important post-estimation methods/functions working --- R/log_lik.R | 18 +++++++++++++++--- R/posterior_predict.R | 13 +++++++++++-- R/stan_CARbym.R | 15 ++++++++------- R/stan_spatial.fit.R | 1 - R/stanreg.R | 15 ++++++++++++++- 5 files changed, 48 insertions(+), 14 deletions(-) diff --git a/R/log_lik.R b/R/log_lik.R index fba22e985..2a2c7059d 100644 --- a/R/log_lik.R +++ b/R/log_lik.R @@ -153,7 +153,10 @@ ll_args <- function(object, newdata = NULL, offset = NULL, trials <- 1 if (is.factor(y)) y <- fac2bin(y) - stopifnot(all(y %in% c(0, 1))) + if (!is(object, "car")) + stopifnot(all(y %in% c(0, 1))) + else + trials <- object$trials } data <- data.frame(y, trials, x) } @@ -218,7 +221,11 @@ ll_args <- function(object, newdata = NULL, offset = NULL, data <- cbind(data, as.matrix(z)) draws$beta <- cbind(draws$beta, b) } - + if (is(object, "car")) { + psi_indx <- grep("psi", colnames(stanmat)) + psi <- stanmat[, psi_indx, drop = FALSE] + data$psi <- t(psi) + } nlist(data, draws, S = NROW(draws$beta), N = nrow(data)) } @@ -247,11 +254,16 @@ ll_args <- function(object, newdata = NULL, offset = NULL, } .xdata <- function(data) { - sel <- c("y", "weights","offset", "trials") + if (!is.null(data$psi)) + sel <- c("y", "weights","offset", "trials", "psi") + else + sel <- c("y", "weights","offset", "trials") data[, -which(colnames(data) %in% sel)] } .mu <- function(data, draws) { eta <- as.vector(linear_predictor(draws$beta, .xdata(data), data$offset)) + if (!is.null(data$psi)) + eta <- eta + as.vector(data$psi) draws$f$linkinv(eta) } diff --git a/R/posterior_predict.R b/R/posterior_predict.R index e306e6698..de5a77375 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -169,7 +169,8 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, } if (!is(object, "polr") && is.binomial(family(object)$family)) ppargs$trials <- pp_binomial_trials(object, newdata) - + if (is(object, "car") && is.binomial(family(object)$family)) + ppargs$trials <- object$trials ppfun <- pp_fun(object) ytilde <- do.call(ppfun, ppargs) if (!is.null(newdata) && nrow(newdata) == 1L) @@ -326,7 +327,15 @@ pp_eta <- function(object, data, draws = NULL) { beta <- stanmat[, seq_len(ncol(x)), drop = FALSE] if (some_draws) beta <- beta[samp, , drop = FALSE] - eta <- linear_predictor(beta, x, data$offset) + if (is(object, "car")) { + psi_indx <- grep("psi", colnames(stanmat)) + psi <- stanmat[, psi_indx, drop = FALSE] + if (some_draws) + psi <- psi[samp, , drop = FALSE] + eta <- linear_predictor(beta, x, data$offset) + psi + } + else + eta <- linear_predictor(beta, x, data$offset) } else { stanmat <- as.matrix(object$stanfit) beta <- stanmat[, seq_len(ncol(x)), drop = FALSE] diff --git a/R/stan_CARbym.R b/R/stan_CARbym.R index 5a20287f2..7f53a8837 100644 --- a/R/stan_CARbym.R +++ b/R/stan_CARbym.R @@ -52,12 +52,6 @@ stan_CARbym <- function(formula, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) - if (family == "binomial") - family <- binomial(link = "logit") - else if (family == "poisson") - family <- poisson(link = "log") - else if (family == "gaussian") - family <- gaussian(link = "identity") fit <- nlist(stanfit, algorithm, data, @@ -67,7 +61,14 @@ stan_CARbym <- function(formula, model = mf, call = match.call(), stan_function = "stan_CARbym") + if (family == "binomial") { + fit$family <- binomial(link = "logit") + fit$trials <- trials + } + else if (family == "poisson") + fit$family <- poisson(link = "log") + else if (family == "gaussian") + fit$family <- gaussian(link = "identity") out <- stanreg(fit) - browser() structure(out, class = c("stanreg", "car")) } diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index dbd6d6088..cec67c4ca 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -163,6 +163,5 @@ stan_spatial.fit <- function(x, y, w, colnames(xtemp), "tau2", if(mod == 1) "sigma2", if(family == "gaussian") "nu2", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) stanfit@sim$fnames_oi <- new_names - browser() return(structure(stanfit)) # return(structure(stanfit, prior.info = prior_info)) } diff --git a/R/stanreg.R b/R/stanreg.R index 9da6e4711..2d31884b5 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -23,6 +23,7 @@ stanreg <- function(object) { opt <- object$algorithm == "optimizing" mer <- !is.null(object$glmod) # used stan_(g)lmer + is_car <- object$stan_function %in% c("stan_CARbym", "stan_CARleroux") stanfit <- object$stanfit family <- object$family y <- object$y @@ -90,8 +91,13 @@ stanreg <- function(object) { # linear predictor, fitted values eta <- linear_predictor(coefs, x, object$offset) + if (is_car) { + psi_indx <- grep("psi", colnames(as.matrix(object$stanfit))) + psi <- as.matrix(object$stanfit)[,psi_indx] + psi <- unname(colMeans(psi)) + eta <- eta + psi + } mu <- family$linkinv(eta) - if (NCOL(y) == 2L) { # residuals of type 'response', (glm which does 'deviance' residuals by default) residuals <- y[, 1L] / rowSums(y) - mu @@ -149,6 +155,13 @@ stanreg <- function(object) { out$eta_z <- eta_z out$phi <- phi } + if (is_car) { + # CARBayes doesn't include the scale parameters in out$coefficients so not sure if we want to. + # exclude <- c(1:nvars, psi_indx, which(rownames(stan_summary) %in% c("mean_PPD", "log-posterior"))) + # out$coefficients = c(coefs, stan_summary[-exclude, select_median(object$algorithm)]) + out$psi <- psi + out$trials <- object$trials + } structure(out, class = c("stanreg", "glm", "lm")) } From 6ad17ba47651b135661f70ec2fbb33471d3ef986 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Wed, 12 Jul 2017 23:53:58 -0400 Subject: [PATCH 03/59] adding stan_bym (inla version) --- NAMESPACE | 3 +- R/priors.R | 8 +++- R/stan_CARbym.R | 14 ++++--- R/stan_spatial.fit.R | 87 ++++++++++++++++++++++++++++++++++---------- exec/spatial.stan | 66 +++++++++++++-------------------- 5 files changed, 110 insertions(+), 68 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 962f178a4..e227c0792 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -53,6 +53,7 @@ S3method(vcov,stanreg) S3method(waic,stanreg) export(R2) export(VarCorr) +export(beta) export(cauchy) export(compare_models) export(decov) @@ -93,12 +94,12 @@ export(product_normal) export(ranef) export(se) export(sigma) -export(stan_CARbym) export(stan_aov) export(stan_betareg) export(stan_betareg.fit) export(stan_biglm) export(stan_biglm.fit) +export(stan_bym) export(stan_gamm4) export(stan_glm) export(stan_glm.fit) diff --git a/R/priors.R b/R/priors.R index e046193bb..0141cc483 100644 --- a/R/priors.R +++ b/R/priors.R @@ -516,7 +516,13 @@ R2 <- function(location = NULL, what = c("mode", "mean", "median", "log")) { list(dist = "R2", location = location, what = what, df = 0, scale = 0) } - +#' @rdname priors +#' @export +beta <- function(alpha = 2, beta = 2) { + validate_parameter_value(alpha) + validate_parameter_value(beta) + nlist(dist = "beta", alpha, beta) +} # internal ---------------------------------------------------------------- diff --git a/R/stan_CARbym.R b/R/stan_CARbym.R index 7f53a8837..1d4316726 100644 --- a/R/stan_CARbym.R +++ b/R/stan_CARbym.R @@ -17,25 +17,26 @@ #' Bayesian CAR BYM models via Stan #' -#' Spatial regression modeling with a conditional autoregressive (CAR). +#' Spatial regression modeling with a conditional autoregressive (CAR) prior. #' #' @export #' -stan_CARbym <- function(formula, +stan_bym <- function(formula, family = c("binomial", "poisson", "gaussian"), data, trials = NULL, W, ..., prior = normal(), prior_intercept = normal(), + prior_sigma = normal(), prior_tau = beta(), prior_nu = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { - stan_function <- "stan_CARbym" - if (!requireNamespace("CARBayes", quietly = TRUE)) - stop("Please install the CARBayes package before using 'stan_CARbym.") + stan_function <- "stan_bym" + if (!requireNamespace("INLA", quietly = TRUE)) + stop(paste("Please install the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) family <- match.arg(family) @@ -49,6 +50,7 @@ stan_CARbym <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, + prior_sigma = prior_sigma, prior_tau = prior_tau, prior_nu = prior_nu, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) @@ -60,7 +62,7 @@ stan_CARbym <- function(formula, formula, model = mf, call = match.call(), - stan_function = "stan_CARbym") + stan_function = stan_function) if (family == "binomial") { fit$family <- binomial(link = "logit") fit$trials <- trials diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index cec67c4ca..79fff3ba9 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -24,6 +24,7 @@ stan_spatial.fit <- function(x, y, w, stan_function, ..., prior = normal(), prior_intercept = normal(), + prior_sigma = normal(), prior_tau = beta(), prior_nu = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, @@ -54,9 +55,9 @@ stan_spatial.fit <- function(x, y, w, } } - if (stan_function == "stan_CARbym") + if (stan_function == "stan_icar") mod <- 1 - else if(stan_function == "stan_CARleroux") + else if (stan_function == "stan_bym") mod <- 2 sparse <- FALSE @@ -64,15 +65,19 @@ stan_spatial.fit <- function(x, y, w, for (i in names(x_stuff)) # xtemp, xbar, has_intercept assign(i, x_stuff[[i]]) nvars <- ncol(xtemp) - - ok_dists <- nlist("normal", student_t = "t", "cauchy") + + # temporarily suppress certain prior options + # ok_dists <- nlist("normal", student_t = "t", "cauchy") + ok_dists <- nlist("normal") ok_intercept_dists <- ok_dists + # Deal with prior prior_stuff <- handle_glm_prior(prior, nvars, link, default_scale = 2.5, ok_dists = ok_dists) for (i in names(prior_stuff)) # prior_{dist, mean, scale, df, autoscale} assign(i, prior_stuff[[i]]) + # Deal with prior_intercept prior_intercept_stuff <- handle_glm_prior(prior_intercept, nvars = 1, default_scale = 10, link = link, ok_dists = ok_intercept_dists) @@ -81,6 +86,31 @@ stan_spatial.fit <- function(x, y, w, for (i in names(prior_intercept_stuff)) # prior_{dist, mean, scale, df, autoscale}_for_intercept assign(i, prior_intercept_stuff[[i]]) + # Deal with prior_tau and prior_sigma + if (stan_function == "stan_bym") { + prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, link, default_scale = 1, + ok_dists = "normal") + for (i in names(prior_sigma_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_sigma_stuff[[i]]) + + prior_tau_stuff <- list(alpha = prior_tau$alpha, beta = prior_tau$beta) + } + else if (stan_function == "stan_icar") { + prior_tau_stuff <- list(alpha = 0, beta = 0) + prior_sigma_stuff <- list(prior_mean = 0, prior_scale = 0) + } + + # Deal with prior_nu + if (family == "gaussian") { + prior_nu_stuff <- handle_glm_prior(prior_nu, nvars = 1, link, default_scale = 1, + ok_dists = "normal") + for (i in names(prior_nu_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_nu_stuff[[i]]) + } + else { + prior_nu_stuff <- list(prior_mean = 0, prior_scale = 0) + } + # QR decomposition for both x and z if (QR) { if (nvars <= 1) @@ -104,7 +134,7 @@ stan_spatial.fit <- function(x, y, w, return(out) } edges <- adj_fun(W) - + # need to use uncentered version standata <- nlist(N = nrow(xtemp), K = ncol(xtemp), @@ -115,21 +145,40 @@ stan_spatial.fit <- function(x, y, w, y_real = y_real, y_int = y_int, trials = trials, - shape_tau = 1, - shape_sigma = 1, - shape_nu = 1, - scale_tau = 1, - scale_sigma = 1, - scale_nu = 1, - loc_beta = rep(0,ncol(xtemp)), - scale_beta = rep(1,ncol(xtemp)), - loc_alpha = 0, - scale_alpha = 1, + shape1_tau = c(prior_tau_stuff$alpha), + shape2_tau = c(prior_tau_stuff$beta), + loc_sigma = c(prior_sigma_stuff$prior_mean), + scale_sigma = c(prior_sigma_stuff$prior_scale), + loc_nu = c(prior_nu_stuff$prior_mean), + scale_nu = c(prior_nu_stuff$prior_scale), + loc_beta = as.array(prior_stuff$prior_mean), + scale_beta = as.array(prior_stuff$prior_scale), + loc_alpha = c(prior_intercept_stuff$prior_mean_for_intercept), + scale_alpha = c(prior_intercept_stuff$prior_scale_for_intercept), has_intercept = has_intercept, mod = mod) + standata$X <- array(standata$X, dim = c(standata$N, standata$K)) + + # create scaling_factor a la Dan Simpson + create_scaling_factor <- function(dat, W) { + #The ICAR precision matrix (note! This is singular) + Q <- diag(rowSums(W), dat$N) - W + #Add a small jitter to the diagonal for numerical stability (optional but recommended) + Q_pert <- Q + diag(dat$N) * max(diag(Q)) * sqrt(.Machine$double.eps) + + # Compute the diagonal elements of the covariance matrix subject to the + # constraint that the entries of the ICAR sum to zero. + #See the function help for further details. + Q_inv <- inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) + Q_inv <- as.matrix(Q_inv) + #Compute the geometric mean of the variances, which are on the diagonal of Q.inv + scaling_factor <- exp(mean(log(diag(Q_inv)))) + return(scaling_factor) + } + standata$scaling_factor <- create_scaling_factor(standata, W) - pars <- c(if (has_intercept) "alpha", "beta", if(mod == 1) "sigma", "tau", if(family == "gaussian") "nu", - "mean_PPD", if (mod < 2) "psi") + pars <- c(if (has_intercept) "alpha", "beta", if(mod == 2) c("sigma", "tau"), if(family == "gaussian") "nu", + "mean_PPD", "psi") stanfit <- stanmodels$spatial @@ -160,8 +209,8 @@ stan_spatial.fit <- function(x, y, w, } } new_names <- c(if (has_intercept) "(Intercept)", - colnames(xtemp), "tau2", if(mod == 1) "sigma2", - if(family == "gaussian") "nu2", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) + colnames(xtemp), if(mod == 2) c("tau", "sigma"), + if(family == "gaussian") "nu", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) stanfit@sim$fnames_oi <- new_names return(structure(stanfit)) # return(structure(stanfit, prior.info = prior_info)) } diff --git a/exec/spatial.stan b/exec/spatial.stan index a63df5853..0d8757ca0 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -11,16 +11,17 @@ data { int edges[E_n, 2]; // adjacency pairs real loc_beta[K]; // priors real scale_beta[K]; // priors - real shape_tau; // priors - real scale_tau; // priors - real shape_sigma; // priors + real shape1_tau; // priors + real shape2_tau; // priors + real loc_sigma; // priors real scale_sigma; // priors - real shape_nu; // priors + real loc_nu; // priors real scale_nu; // priors real loc_alpha; // priors real scale_alpha; // priors int has_intercept; - int mod; + int mod; // 1 = icar; 2 = bym + real scaling_factor; } transformed data { real poisson_max = pow(2.0, 30.0); @@ -28,38 +29,34 @@ transformed data { parameters { real alpha[has_intercept]; // intercept vector[K] beta; // predictors on covariates (including intercept) - vector[N] theta_raw[mod == 1? 1 : 0]; // used for random effect (non-spatial) + vector[N] theta_raw[mod == 2? 1 : 0]; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) - real tau; // variance i.e. tau^2 - real sigma; // variance i.e. sigma^2 + real tau[mod == 2? 1 : 0]; // variance i.e. tau^2 + real sigma[mod == 2? 1 : 0]; // variance i.e. sigma^2 real nu[family == 1? 1 : 0]; // applies only if family is gaussian } transformed parameters { - vector[N] theta[mod == 1? 1 : 0]; // non-centered random effect (non-spatial) vector[N] phi; // non-centered random effect (spatial) - theta[1] = sqrt(sigma) * theta_raw[1]; + vector[N] psi; phi[1:(N - 1)] = phi_raw; phi[N] = -sum(phi_raw); - phi = phi * sqrt(tau); + if (mod == 1) + psi = phi; + else if (mod == 2) + psi = sigma[1] *(sqrt(tau[1])*theta_raw[1] + sqrt(1-tau[1])*scaling_factor*phi); } model { vector[N] eta; // linear predictor + spatial random effects // model if (has_intercept == 1) { - if (mod == 1) - eta = alpha[1] + X * beta + phi + theta[1]; - else if (mod == 2) - eta = alpha[1] + X * beta + phi; + eta = alpha[1] + X * beta + psi; } else { - if (mod == 1) - eta = X * beta + phi + theta[1]; - else if (mod == 2) - eta = X * beta + phi; + eta = X * beta + psi; } if (family == 1) { target+= normal_lpdf(y_real | eta, nu[1]); - target+= inv_gamma_lpdf(nu[1] | shape_nu, scale_nu); + target+= normal_lpdf(nu[1] | loc_nu, scale_nu); } else if (family == 2) { target+= poisson_log_lpmf(y_int | eta); @@ -68,38 +65,25 @@ model { target+= binomial_lpmf(y_int | trials, inv_logit(eta)); } // priors - if (mod == 1) - target+= - N * log(sqrt(tau)) - 0.5 * inv(tau) * dot_self(phi[edges[,1]] - phi[edges[,2]]); - else if (mod == 2) - reject("leroux model not supported") + target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); if (has_intercept == 1) target += normal_lpdf(alpha | loc_alpha, scale_alpha); target+= normal_lpdf(beta | loc_beta , scale_beta); - target+= normal_lpdf(theta_raw[1] | 0, 1); - target+= normal_lpdf(phi_raw | 0, 1); - target+= inv_gamma_lpdf(tau | shape_tau, scale_tau); - target+= inv_gamma_lpdf(sigma | shape_sigma, scale_sigma); + if (mod == 2) { + target+= normal_lpdf(theta_raw[1] | 0, 1); + target+= normal_lpdf(sigma | loc_sigma, scale_sigma); + target+= beta_lpdf(tau | shape1_tau, shape2_tau); + } } generated quantities { real mean_PPD = 0; - vector[N] psi; - if (mod == 1) - psi = theta[1] + phi; - else if (mod == 2) - psi = phi; { vector[N] eta; if (has_intercept == 1) { - if (mod == 1) - eta = alpha[1] + X * beta + phi + theta[1]; - else if (mod == 2) - eta = alpha[1] + X * beta + phi; + eta = alpha[1] + X * beta + psi; } else { - if (mod == 1) - eta = X * beta + phi + theta[1]; - else if (mod == 2) - eta = X * beta + phi; + eta = X * beta + psi; } for (n in 1:N) { if (family == 1) From c2e221299e26026cfa7499bd376cf9c54e0488e3 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Thu, 13 Jul 2017 00:30:15 -0400 Subject: [PATCH 04/59] adding stan_besag (icar) --- DESCRIPTION | 1 + NAMESPACE | 1 + R/stan_besag.R | 76 +++++++++++++++++++++++++++++++++ R/{stan_CARbym.R => stan_bym.R} | 2 +- R/stan_spatial.fit.R | 8 ++-- 5 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 R/stan_besag.R rename R/{stan_CARbym.R => stan_bym.R} (98%) diff --git a/DESCRIPTION b/DESCRIPTION index 516cb2009..a8b880b8e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -45,6 +45,7 @@ Suggests: digest, gridExtra, HSAUR3, + INLA, knitr (>= 1.15.1), MASS, mgcv (>= 1.8-13), diff --git a/NAMESPACE b/NAMESPACE index e227c0792..0f97f6b97 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -95,6 +95,7 @@ export(ranef) export(se) export(sigma) export(stan_aov) +export(stan_besag) export(stan_betareg) export(stan_betareg.fit) export(stan_biglm) diff --git a/R/stan_besag.R b/R/stan_besag.R new file mode 100644 index 000000000..819595280 --- /dev/null +++ b/R/stan_besag.R @@ -0,0 +1,76 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2013, 2014, 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#' Bayesian CAR Intrinsic Autoregressive models via Stan +#' +#' Spatial regression modeling with an intrinsic conditional autoregressive (ICAR) prior. +#' +#' @export +#' + +stan_besag <- function(formula, + family = c("binomial", "poisson", "gaussian"), + data, + trials = NULL, + W, + ..., + prior = normal(), prior_intercept = normal(), + prior_nu = NULL, + prior_PD = FALSE, + algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), + adapt_delta = NULL, + QR = FALSE) { + stan_function <- "stan_besag" + if (!requireNamespace("INLA", quietly = TRUE)) + stop(paste("Please install the INLA package before using", stan_function)) + mc <- match.call(expand.dots = FALSE) + algorithm <- match.arg(algorithm) + family <- match.arg(family) + mf <- model.frame(mc, data) + Y <- array1D_check(model.response(mf, type = "any")) + X <- model.matrix(formula, data) + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, + trials = trials, + family = family, + stan_function = stan_function, + ..., + prior = prior, + prior_intercept = prior_intercept, + prior_nu = prior_nu, + prior_PD = prior_PD, + algorithm = algorithm, adapt_delta = adapt_delta, + QR = QR) + fit <- nlist(stanfit, + algorithm, + data, + x = X, y = Y, + family, + formula, + model = mf, + call = match.call(), + stan_function = stan_function) + if (family == "binomial") { + fit$family <- binomial(link = "logit") + fit$trials <- trials + } + else if (family == "poisson") + fit$family <- poisson(link = "log") + else if (family == "gaussian") + fit$family <- gaussian(link = "identity") + out <- stanreg(fit) + structure(out, class = c("stanreg", "car")) +} diff --git a/R/stan_CARbym.R b/R/stan_bym.R similarity index 98% rename from R/stan_CARbym.R rename to R/stan_bym.R index 1d4316726..cd29e09ae 100644 --- a/R/stan_CARbym.R +++ b/R/stan_bym.R @@ -46,7 +46,7 @@ stan_bym <- function(formula, stanfit <- stan_spatial.fit(x = X, y = Y, w = W, trials = trials, family = family, - stan_function, + stan_function = stan_function, ..., prior = prior, prior_intercept = prior_intercept, diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 79fff3ba9..4d0027f25 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -21,10 +21,10 @@ stan_spatial.fit <- function(x, y, w, trials = NULL, family = c("binomial", "poisson", "gaussian"), - stan_function, + stan_function = c("stan_besag", "stan_bym"), ..., prior = normal(), prior_intercept = normal(), - prior_sigma = normal(), prior_tau = beta(), prior_nu = NULL, + prior_sigma = NULL, prior_tau = NULL, prior_nu = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, @@ -55,7 +55,7 @@ stan_spatial.fit <- function(x, y, w, } } - if (stan_function == "stan_icar") + if (stan_function == "stan_besag") mod <- 1 else if (stan_function == "stan_bym") mod <- 2 @@ -95,7 +95,7 @@ stan_spatial.fit <- function(x, y, w, prior_tau_stuff <- list(alpha = prior_tau$alpha, beta = prior_tau$beta) } - else if (stan_function == "stan_icar") { + else if (stan_function == "stan_besag") { prior_tau_stuff <- list(alpha = 0, beta = 0) prior_sigma_stuff <- list(prior_mean = 0, prior_scale = 0) } From 5b3fda89dee18a1854f0e7cee27fb64a1ecf47b0 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Thu, 13 Jul 2017 00:48:11 -0400 Subject: [PATCH 05/59] fixing conditional in stanreg for car models --- R/stan_bym.R | 1 + R/stanreg.R | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/R/stan_bym.R b/R/stan_bym.R index cd29e09ae..ecffb7ed9 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -63,6 +63,7 @@ stan_bym <- function(formula, model = mf, call = match.call(), stan_function = stan_function) + if (family == "binomial") { fit$family <- binomial(link = "logit") fit$trials <- trials diff --git a/R/stanreg.R b/R/stanreg.R index 2d31884b5..53f6c23fa 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -23,7 +23,7 @@ stanreg <- function(object) { opt <- object$algorithm == "optimizing" mer <- !is.null(object$glmod) # used stan_(g)lmer - is_car <- object$stan_function %in% c("stan_CARbym", "stan_CARleroux") + is_car <- object$stan_function %in% c("stan_besag", "stan_bym") stanfit <- object$stanfit family <- object$family y <- object$y From 55fb6c6df2e636e2cd6720761f60cee31a30d910 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Thu, 20 Jul 2017 22:48:44 -0400 Subject: [PATCH 06/59] expanding prior options for CAR models --- R/stan_besag.R | 4 +- R/stan_spatial.fit.R | 84 ++++++++++++++++++++++++---------- exec/spatial.stan | 105 ++++++++++++++++++++++++++++++++----------- 3 files changed, 143 insertions(+), 50 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 819595280..8889c61ce 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -28,7 +28,7 @@ stan_besag <- function(formula, trials = NULL, W, ..., - prior = normal(), prior_intercept = normal(), + prior = normal(), prior_intercept = normal(), prior_tau = normal(), prior_nu = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), @@ -43,6 +43,7 @@ stan_besag <- function(formula, mf <- model.frame(mc, data) Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, trials = trials, family = family, @@ -50,6 +51,7 @@ stan_besag <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, + prior_tau = prior_tau, prior_nu = prior_nu, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 4d0027f25..a10e69ca2 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -33,12 +33,13 @@ stan_spatial.fit <- function(x, y, w, algorithm <- match.arg(algorithm) family <- match.arg(family) - + trials <- ifelse(is.null(trials), rep(0,length(y)), trials) + # Replace all this stuff with family = binomial(link = "logit") calls etc. if (family == "gaussian") { y_real <- y y_int <- rep(0, length(y)) link <- "identity" - trials <- rep(0, length(Y)) + trials <- rep(0, length(y)) family_num <- 1 } else { @@ -50,7 +51,7 @@ stan_spatial.fit <- function(x, y, w, } else { # poisson link <- "log" - trials <- rep(0, length(Y)) + trials <- rep(0, length(y)) family_num <- 2 } } @@ -66,10 +67,9 @@ stan_spatial.fit <- function(x, y, w, assign(i, x_stuff[[i]]) nvars <- ncol(xtemp) - # temporarily suppress certain prior options - # ok_dists <- nlist("normal", student_t = "t", "cauchy") - ok_dists <- nlist("normal") + ok_dists <- nlist("normal", student_t = "t", "cauchy") ok_intercept_dists <- ok_dists + ok_scale_dists <- nlist("normal", student_t = "t", "cauchy", "exponential") # Deal with prior prior_stuff <- handle_glm_prior(prior, nvars, link, default_scale = 2.5, @@ -89,29 +89,50 @@ stan_spatial.fit <- function(x, y, w, # Deal with prior_tau and prior_sigma if (stan_function == "stan_bym") { prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, link, default_scale = 1, - ok_dists = "normal") + ok_dists = ok_scale_dists) + names(prior_sigma_stuff) <- paste0(names(prior_sigma_stuff), + "_for_aux") for (i in names(prior_sigma_stuff)) # prior_{dist, mean, scale, df, autoscale} assign(i, prior_sigma_stuff[[i]]) prior_tau_stuff <- list(alpha = prior_tau$alpha, beta = prior_tau$beta) + prior_dist_for_tau <- 0 + prior_mean_for_tau <- 0 + prior_scale_for_tau <- 1 + prior_df_for_tau <- 1 } else if (stan_function == "stan_besag") { - prior_tau_stuff <- list(alpha = 0, beta = 0) - prior_sigma_stuff <- list(prior_mean = 0, prior_scale = 0) + prior_tau_stuff <- handle_glm_prior(prior_tau, nvars = 1, link, default_scale = 1, + ok_dists = ok_scale_dists) + names(prior_tau_stuff) <- paste0(names(prior_tau_stuff), + "_for_tau") + for (i in names(prior_tau_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_tau_stuff[[i]]) + prior_tau_stuff$alpha <- 0 + prior_tau_stuff$beta <- 0 + prior_dist_for_aux <- 0 + prior_mean_for_aux <- 0 + prior_scale_for_aux <- 1 + prior_df_for_aux <- 1 } - - # Deal with prior_nu + + # Deal with prior_nu... needs more dist options if (family == "gaussian") { prior_nu_stuff <- handle_glm_prior(prior_nu, nvars = 1, link, default_scale = 1, - ok_dists = "normal") + ok_dists = ok_dists) + names(prior_nu_stuff) <- paste0(names(prior_nu_stuff), + "_for_nu") for (i in names(prior_nu_stuff)) # prior_{dist, mean, scale, df, autoscale} assign(i, prior_nu_stuff[[i]]) } else { - prior_nu_stuff <- list(prior_mean = 0, prior_scale = 0) + prior_dist_for_nu <- 0 + prior_mean_for_nu <- 0 + prior_scale_for_nu <- 1 + prior_df_for_nu <- 1 } - # QR decomposition for both x and z + # QR decomposition for x if (QR) { if (nvars <= 1) stop("'QR' can only be specified when there are multiple predictors.") @@ -141,20 +162,35 @@ stan_spatial.fit <- function(x, y, w, edges = edges, E_n = nrow(edges), family = family_num, + link = 0, # FIX ME!!! X = if (has_intercept) x[,-1] else x , # use xtemp y_real = y_real, y_int = y_int, trials = trials, shape1_tau = c(prior_tau_stuff$alpha), shape2_tau = c(prior_tau_stuff$beta), - loc_sigma = c(prior_sigma_stuff$prior_mean), - scale_sigma = c(prior_sigma_stuff$prior_scale), - loc_nu = c(prior_nu_stuff$prior_mean), - scale_nu = c(prior_nu_stuff$prior_scale), - loc_beta = as.array(prior_stuff$prior_mean), - scale_beta = as.array(prior_stuff$prior_scale), - loc_alpha = c(prior_intercept_stuff$prior_mean_for_intercept), - scale_alpha = c(prior_intercept_stuff$prior_scale_for_intercept), + prior_dist_for_intercept = prior_dist_for_intercept, + prior_dist = prior_dist, + prior_dist_tau = prior_dist_for_tau, + prior_dist_aux = prior_dist_for_aux, + prior_dist_nu = prior_dist_for_nu, + prior_mean_for_intercept = c(prior_mean_for_intercept), + prior_scale_for_intercept = c(prior_scale_for_intercept), + prior_df_for_intercept = c(prior_df_for_intercept), + prior_mean = as.array(prior_mean), + prior_scale = as.array(prior_scale), + prior_df = c(prior_df), + prior_mean_aux = c(prior_mean_for_aux), + prior_scale_aux = c(prior_scale_for_aux), + prior_df_aux = c(prior_df_for_aux), + prior_rate_aux = 0, # FIX ME!!! + prior_mean_tau = c(prior_mean_for_tau), + prior_scale_tau = c(prior_scale_for_tau), + prior_df_tau = c(prior_df_for_tau), + prior_rate_tau = 0, # FIX ME!!! + prior_mean_nu = c(prior_mean_for_nu), + prior_scale_nu = c(prior_scale_for_nu), + prior_df_nu = c(prior_df_for_nu), has_intercept = has_intercept, mod = mod) standata$X <- array(standata$X, dim = c(standata$N, standata$K)) @@ -177,7 +213,7 @@ stan_spatial.fit <- function(x, y, w, } standata$scaling_factor <- create_scaling_factor(standata, W) - pars <- c(if (has_intercept) "alpha", "beta", if(mod == 2) c("sigma", "tau"), if(family == "gaussian") "nu", + pars <- c(if (has_intercept) "alpha", "beta", "tau", if(mod == 2) c("sigma"), if(family == "gaussian") "nu", "mean_PPD", "psi") stanfit <- stanmodels$spatial @@ -209,7 +245,7 @@ stan_spatial.fit <- function(x, y, w, } } new_names <- c(if (has_intercept) "(Intercept)", - colnames(xtemp), if(mod == 2) c("tau", "sigma"), + colnames(xtemp), "tau", if(mod == 2) c("sigma"), if(family == "gaussian") "nu", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) stanfit@sim$fnames_oi <- new_names return(structure(stanfit)) # return(structure(stanfit, prior.info = prior_info)) diff --git a/exec/spatial.stan b/exec/spatial.stan index 0d8757ca0..30234612d 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -1,4 +1,4 @@ -// CAR (BYM version i.e. IAR) +// CAR SPATIAL MODELS data { int N; // number of regions int K; // number of predictors (inc intercept) @@ -7,31 +7,46 @@ data { int y_int[N]; // outcome real y_real[N]; // outcome int family; // family (1 = Gaussian, 2 = Poisson, 3 = Binomial) + int link; int E_n; // number of adjacency pairs int edges[E_n, 2]; // adjacency pairs - real loc_beta[K]; // priors - real scale_beta[K]; // priors real shape1_tau; // priors real shape2_tau; // priors - real loc_sigma; // priors - real scale_sigma; // priors - real loc_nu; // priors - real scale_nu; // priors - real loc_alpha; // priors - real scale_alpha; // priors int has_intercept; - int mod; // 1 = icar; 2 = bym + int mod; // 1 = besag (icar); 2 = bym real scaling_factor; + int prior_dist_for_intercept; + int prior_dist; + int prior_dist_aux; + int prior_dist_tau; + int prior_dist_nu; + real prior_mean_for_intercept; + real prior_scale_for_intercept; + real prior_df_for_intercept; + vector[K] prior_mean; + vector[K] prior_scale; + real prior_df; + real prior_mean_aux; + real prior_scale_aux; + real prior_df_aux; + real prior_rate_aux; + real prior_mean_tau; + real prior_scale_tau; + real prior_df_tau; + real prior_rate_tau; + real prior_mean_nu; + real prior_scale_nu; + real prior_df_nu; } transformed data { - real poisson_max = pow(2.0, 30.0); + real poisson_max = 30 * log(2); } parameters { real alpha[has_intercept]; // intercept vector[K] beta; // predictors on covariates (including intercept) vector[N] theta_raw[mod == 2? 1 : 0]; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) - real tau[mod == 2? 1 : 0]; // variance i.e. tau^2 + real tau; // variance i.e. tau^2 real sigma[mod == 2? 1 : 0]; // variance i.e. sigma^2 real nu[family == 1? 1 : 0]; // applies only if family is gaussian } @@ -41,22 +56,20 @@ transformed parameters { phi[1:(N - 1)] = phi_raw; phi[N] = -sum(phi_raw); if (mod == 1) - psi = phi; + psi = phi * sqrt(inv(tau)); else if (mod == 2) - psi = sigma[1] *(sqrt(tau[1])*theta_raw[1] + sqrt(1-tau[1])*scaling_factor*phi); + psi = sigma[1]*(sqrt(1-tau)*theta_raw[1] + sqrt(tau/scaling_factor)*phi); + // psi = sigma[1]*(sqrt(tau)*theta_raw[1] + sqrt(1-tau)*scaling_factor*phi); } model { vector[N] eta; // linear predictor + spatial random effects // model - if (has_intercept == 1) { + if (has_intercept == 1) eta = alpha[1] + X * beta + psi; - } - else { + else eta = X * beta + psi; - } if (family == 1) { target+= normal_lpdf(y_real | eta, nu[1]); - target+= normal_lpdf(nu[1] | loc_nu, scale_nu); } else if (family == 2) { target+= poisson_log_lpmf(y_int | eta); @@ -64,15 +77,57 @@ model { else if (family == 3) { target+= binomial_lpmf(y_int | trials, inv_logit(eta)); } - // priors + // prior on spatial parameter target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); - if (has_intercept == 1) - target += normal_lpdf(alpha | loc_alpha, scale_alpha); - target+= normal_lpdf(beta | loc_beta , scale_beta); - if (mod == 2) { + // priors on coefficients + if (has_intercept == 1) { + if (prior_dist_for_intercept == 1) + target+= normal_lpdf(alpha | prior_mean_for_intercept, prior_scale_for_intercept); + else if (prior_dist_for_intercept == 2) + target+= student_t_lpdf(alpha | prior_df_for_intercept, prior_mean_for_intercept, prior_scale_for_intercept); + /* else prior_dist_intercept is 0 and nothing is added */ + } + if (K > 0) { + if (prior_dist == 1) + target+= normal_lpdf(beta | prior_mean, prior_scale); + else if (prior_dist == 2) + target+= student_t_lpdf(beta | prior_df, prior_mean, prior_scale); + else if (prior_dist == 3) + target+= cauchy_lpdf(beta | prior_mean, prior_scale); + /* else prior_dist is 0 and nothing is added */ + } + if (mod == 2) { // BYM target+= normal_lpdf(theta_raw[1] | 0, 1); - target+= normal_lpdf(sigma | loc_sigma, scale_sigma); target+= beta_lpdf(tau | shape1_tau, shape2_tau); + if (prior_dist_aux == 1) + target+= normal_lpdf(sigma | prior_mean_aux, prior_scale_aux); + else if (prior_dist_aux == 2) + target+= student_t_lpdf(sigma | prior_df_aux, prior_mean_aux, prior_scale_aux); + else if (prior_dist_aux == 3) + target+= cauchy_lpdf(sigma | prior_mean_aux, prior_scale_aux); + else if (prior_dist_aux == 4) + target+= exponential_lpdf(sigma | prior_rate_aux); + /* else prior_dist_aux is 0 and nothing is added */ + } + else { + if (prior_dist_tau == 1) + target+= normal_lpdf(tau | prior_mean_tau, prior_scale_tau); + else if (prior_dist_tau == 2) + target+= student_t_lpdf(tau | prior_df_tau, prior_mean_tau, prior_scale_tau); + else if (prior_dist_tau == 3) + target+= cauchy_lpdf(tau | prior_mean_tau, prior_scale_tau); + else if (prior_dist_tau == 4) + target+= exponential_lpdf(tau | prior_rate_tau); + /* else prior_dist_tau is 0 and nothing is added */ + } + if (family == 1) { // prior on sd if outcome is gaussian + if (prior_dist_nu == 1) + target+= normal_lpdf(nu[1] | prior_mean_nu, prior_scale_nu); + else if (prior_dist_nu == 2) + target+= student_t_lpdf(nu[1] | prior_df_nu, prior_mean_nu, prior_scale_nu); + else if (prior_dist_nu == 3) + target+= cauchy_lpdf(nu[1] | prior_mean_nu, prior_scale_nu); + /* else prior_dist_nu is 0 and nothing is added */ } } generated quantities { From 6247da9c32c841dad1532ff9a441296017dcca08 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 24 Jul 2017 23:49:25 -0400 Subject: [PATCH 07/59] changes to spatial.fit file --- R/stan_spatial.fit.R | 102 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 3 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index a10e69ca2..c42479154 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -33,7 +33,8 @@ stan_spatial.fit <- function(x, y, w, algorithm <- match.arg(algorithm) family <- match.arg(family) - trials <- ifelse(is.null(trials), rep(0,length(y)), trials) + if (is.null(trials)) + trials <- rep(0,length(y)) # Replace all this stuff with family = binomial(link = "logit") calls etc. if (family == "gaussian") { y_real <- y @@ -215,7 +216,21 @@ stan_spatial.fit <- function(x, y, w, pars <- c(if (has_intercept) "alpha", "beta", "tau", if(mod == 2) c("sigma"), if(family == "gaussian") "nu", "mean_PPD", "psi") - + + prior_info <- summarize_spatial_prior( + user_prior = prior_stuff, + user_prior_intercept = prior_intercept_stuff, + user_prior_tau = prior_tau_stuff, + user_prior_nu = prior_nu_stuff, + user_prior_aux = prior_aux_stuff, + has_intercept = has_intercept, + has_predictors = nvars > 0, + adjusted_prior_scale = prior_scale, + adjusted_prior_intercept_scale = prior_scale_for_intercept, + adjusted_prior_scale_tau = prior_scale_for_tau, + adjusted_prior_scale_nu = prior_scale_for_nu, + adjusted_prior_scale_aux = prior_scale_for_aux) + browser() stanfit <- stanmodels$spatial if (algorithm == "sampling") { @@ -248,5 +263,86 @@ stan_spatial.fit <- function(x, y, w, colnames(xtemp), "tau", if(mod == 2) c("sigma"), if(family == "gaussian") "nu", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) stanfit@sim$fnames_oi <- new_names - return(structure(stanfit)) # return(structure(stanfit, prior.info = prior_info)) + return(structure(stanfit, prior.info = prior_info)) +} + +# Summarize spatial prior + +summarize_spatial_prior <- function(user_prior, + user_prior_intercept, + user_prior_tau, + user_prior_nu, + user_prior_aux, + has_intercept, + has_predictors, + adjusted_prior_scale, + adjusted_prior_intercept_scale, + adjusted_prior_scale_tau, + adjusted_prior_scale_nu, + adjusted_prior_scale_aux) { + rescaled_coef <- + user_prior$prior_autoscale && has_predictors && + !is.na(user_prior$prior_dist_name) && + !all(user_prior$prior_scale == adjusted_prior_scale) + rescaled_int <- + user_prior_intercept$prior_autoscale_for_intercept && has_intercept && + !is.na(user_prior_intercept$prior_dist_name_for_intercept) && + (user_prior_intercept$prior_scale != adjusted_prior_intercept_scale) + + if (has_predictors && user_prior$prior_dist_name %in% "t") { + if (all(user_prior$prior_df == 1)) { + user_prior$prior_dist_name <- "cauchy" + } else { + user_prior$prior_dist_name <- "student_t" + } + } + if (has_intercept && + user_prior_intercept$prior_dist_name_for_intercept %in% "t") { + if (all(user_prior_intercept$prior_df_for_intercept == 1)) { + user_prior_intercept$prior_dist_name_for_intercept <- "cauchy" + } else { + user_prior_intercept$prior_dist_name_for_intercept <- "student_t" + } + } + prior_list <- list( + prior = + if (!has_predictors) NULL else with(user_prior, list( + dist = prior_dist_name, + location = prior_mean, + scale = prior_scale, + adjusted_scale = if (rescaled_coef) + adjusted_prior_scale else NULL, + df = if (prior_dist_name %in% c("student_t", "hs", "hs_plus", + "lasso", "product_normal")) + prior_df else NULL + )), + prior_intercept = + if (!has_intercept) NULL else with(user_prior_intercept, list( + dist = prior_dist_name_for_intercept, + location = prior_mean_for_intercept, + scale = prior_scale_for_intercept, + adjusted_scale = if (rescaled_int) + adjusted_prior_intercept_scale else NULL, + df = if (prior_dist_name_for_intercept %in% "student_t") + prior_df_for_intercept else NULL + ))#, + #prior_aux = + # if (!has_phi) NULL else with(user_prior_aux, list( + # dist = prior_dist_name_for_aux, + # location = if (!is.na(prior_dist_name_for_aux) && + # prior_dist_name_for_aux != "exponential") + # prior_mean_for_aux else NULL, + # scale = if (!is.na(prior_dist_name_for_aux) && + # prior_dist_name_for_aux != "exponential") + # prior_scale_for_aux else NULL, + # df = if (!is.na(prior_dist_name_for_aux) && + # prior_dist_name_for_aux %in% "student_t") + # prior_df_for_aux else NULL, + # rate = if (!is.na(prior_dist_name_for_aux) && + # prior_dist_name_for_aux %in% "exponential") + # 1 / prior_scale_for_aux else NULL, + # aux_name = "phi" + # )) + ) + return(prior_list) } From e3ea475aca70d9b1c8b580ab89194c079d648284 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Fri, 4 Aug 2017 16:51:03 -0400 Subject: [PATCH 08/59] adding linkinv chunks to spatial.stan --- NAMESPACE | 5 +---- R/stan_besag.R | 13 +++++-------- R/stan_spatial.fit.R | 45 ++++++++++++++++++++++++++------------------ exec/spatial.stan | 25 ++++++++++++++++++------ 4 files changed, 52 insertions(+), 36 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index d710962cf..822a103a2 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -55,11 +55,8 @@ S3method(vcov,stanreg) S3method(waic,stanreg) export(R2) export(VarCorr) -<<<<<<< HEAD -export(beta) -======= export(bayes_R2) ->>>>>>> master +export(beta) export(cauchy) export(compare_models) export(decov) diff --git a/R/stan_besag.R b/R/stan_besag.R index 8889c61ce..07f70228f 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -23,7 +23,7 @@ #' stan_besag <- function(formula, - family = c("binomial", "poisson", "gaussian"), + family = gaussian(), data, trials = NULL, W, @@ -39,11 +39,11 @@ stan_besag <- function(formula, stop(paste("Please install the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) - family <- match.arg(family) + family <- validate_family(family) mf <- model.frame(mc, data) Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) - + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, trials = trials, family = family, @@ -65,14 +65,11 @@ stan_besag <- function(formula, model = mf, call = match.call(), stan_function = stan_function) - if (family == "binomial") { + + if (family$family == "binomial") { fit$family <- binomial(link = "logit") fit$trials <- trials } - else if (family == "poisson") - fit$family <- poisson(link = "log") - else if (family == "gaussian") - fit$family <- gaussian(link = "identity") out <- stanreg(fit) structure(out, class = c("stanreg", "car")) } diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index c42479154..0cc22b6ee 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -20,7 +20,7 @@ stan_spatial.fit <- function(x, y, w, trials = NULL, - family = c("binomial", "poisson", "gaussian"), + family = gaussian(), stan_function = c("stan_besag", "stan_bym"), ..., prior = normal(), prior_intercept = normal(), @@ -32,26 +32,34 @@ stan_spatial.fit <- function(x, y, w, # check that W is appropriate algorithm <- match.arg(algorithm) - family <- match.arg(family) + + family <- validate_family(family) + supported_families <- c("binomial", "gaussian", "poisson") + fam <- which(pmatch(supported_families, family$family, nomatch = 0L) == 1L) + if (!length(fam)) + stop("'family' must be one of ", paste(supported_families, collapse = ", ")) + + supported_links <- supported_glm_links(supported_families[fam]) + link <- which(supported_links == family$link) + if (!length(link)) + stop("'link' must be one of ", paste(supported_links, collapse = ", ")) + if (is.null(trials)) trials <- rep(0,length(y)) # Replace all this stuff with family = binomial(link = "logit") calls etc. - if (family == "gaussian") { + if (family$family == "gaussian") { y_real <- y y_int <- rep(0, length(y)) - link <- "identity" trials <- rep(0, length(y)) family_num <- 1 } else { y_real <- rep(0, length(y)) y_int <- y - if (family == "binomial") { - link <- "logit" + if (family$family == "binomial") { family_num <- 3 } else { # poisson - link <- "log" trials <- rep(0, length(y)) family_num <- 2 } @@ -73,14 +81,14 @@ stan_spatial.fit <- function(x, y, w, ok_scale_dists <- nlist("normal", student_t = "t", "cauchy", "exponential") # Deal with prior - prior_stuff <- handle_glm_prior(prior, nvars, link, default_scale = 2.5, + prior_stuff <- handle_glm_prior(prior, nvars, family$link, default_scale = 2.5, ok_dists = ok_dists) for (i in names(prior_stuff)) # prior_{dist, mean, scale, df, autoscale} assign(i, prior_stuff[[i]]) # Deal with prior_intercept prior_intercept_stuff <- handle_glm_prior(prior_intercept, nvars = 1, - default_scale = 10, link = link, + default_scale = 10, link = family$link, ok_dists = ok_intercept_dists) names(prior_intercept_stuff) <- paste0(names(prior_intercept_stuff), "_for_intercept") @@ -89,7 +97,7 @@ stan_spatial.fit <- function(x, y, w, # Deal with prior_tau and prior_sigma if (stan_function == "stan_bym") { - prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, link, default_scale = 1, + prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, family$link, default_scale = 1, ok_dists = ok_scale_dists) names(prior_sigma_stuff) <- paste0(names(prior_sigma_stuff), "_for_aux") @@ -103,7 +111,7 @@ stan_spatial.fit <- function(x, y, w, prior_df_for_tau <- 1 } else if (stan_function == "stan_besag") { - prior_tau_stuff <- handle_glm_prior(prior_tau, nvars = 1, link, default_scale = 1, + prior_tau_stuff <- handle_glm_prior(prior_tau, nvars = 1, family$link, default_scale = 1, ok_dists = ok_scale_dists) names(prior_tau_stuff) <- paste0(names(prior_tau_stuff), "_for_tau") @@ -118,8 +126,8 @@ stan_spatial.fit <- function(x, y, w, } # Deal with prior_nu... needs more dist options - if (family == "gaussian") { - prior_nu_stuff <- handle_glm_prior(prior_nu, nvars = 1, link, default_scale = 1, + if (family$family == "gaussian") { + prior_nu_stuff <- handle_glm_prior(prior_nu, nvars = 1, family$link, default_scale = 1, ok_dists = ok_dists) names(prior_nu_stuff) <- paste0(names(prior_nu_stuff), "_for_nu") @@ -163,8 +171,9 @@ stan_spatial.fit <- function(x, y, w, edges = edges, E_n = nrow(edges), family = family_num, - link = 0, # FIX ME!!! - X = if (has_intercept) x[,-1] else x , # use xtemp + link = link, + X = if (has_intercept) x[,-1] else x , # include decorrelation and use xtemp + xbar = as.array(xbar), y_real = y_real, y_int = y_int, trials = trials, @@ -214,7 +223,7 @@ stan_spatial.fit <- function(x, y, w, } standata$scaling_factor <- create_scaling_factor(standata, W) - pars <- c(if (has_intercept) "alpha", "beta", "tau", if(mod == 2) c("sigma"), if(family == "gaussian") "nu", + pars <- c(if (has_intercept) "alpha", "beta", "tau", if(mod == 2) c("sigma"), if(family$family == "gaussian") "nu", "mean_PPD", "psi") prior_info <- summarize_spatial_prior( @@ -230,7 +239,7 @@ stan_spatial.fit <- function(x, y, w, adjusted_prior_scale_tau = prior_scale_for_tau, adjusted_prior_scale_nu = prior_scale_for_nu, adjusted_prior_scale_aux = prior_scale_for_aux) - browser() + stanfit <- stanmodels$spatial if (algorithm == "sampling") { @@ -261,7 +270,7 @@ stan_spatial.fit <- function(x, y, w, } new_names <- c(if (has_intercept) "(Intercept)", colnames(xtemp), "tau", if(mod == 2) c("sigma"), - if(family == "gaussian") "nu", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) + if(family$family == "gaussian") "nu", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) stanfit@sim$fnames_oi <- new_names return(structure(stanfit, prior.info = prior_info)) } diff --git a/exec/spatial.stan b/exec/spatial.stan index 30234612d..e38e0c09e 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -1,8 +1,14 @@ // CAR SPATIAL MODELS +functions { + #include "continuous_likelihoods.stan" + #include "binomial_likelihoods.stan" + #include "count_likelihoods.stan" +} data { int N; // number of regions int K; // number of predictors (inc intercept) matrix[N,K] X; // model matrix + vector[K] xbar; int trials[N]; // binomial trials (0 1d array if not applicable) int y_int[N]; // outcome real y_real[N]; // outcome @@ -42,7 +48,7 @@ transformed data { real poisson_max = 30 * log(2); } parameters { - real alpha[has_intercept]; // intercept + real gamma[has_intercept]; // raw intercept vector[K] beta; // predictors on covariates (including intercept) vector[N] theta_raw[mod == 2? 1 : 0]; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) @@ -63,28 +69,32 @@ transformed parameters { } model { vector[N] eta; // linear predictor + spatial random effects - // model + // deal with intercept if (has_intercept == 1) - eta = alpha[1] + X * beta + psi; + eta = gamma[1] + X * beta + psi; else eta = X * beta + psi; + // likelihoods if (family == 1) { + eta = linkinv_gauss(eta, link); target+= normal_lpdf(y_real | eta, nu[1]); } else if (family == 2) { + eta = linkinv_count(eta, link); target+= poisson_log_lpmf(y_int | eta); } else if (family == 3) { + eta = linkinv_binom(eta, link); target+= binomial_lpmf(y_int | trials, inv_logit(eta)); } - // prior on spatial parameter + // prior on spatial parameter vector target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); // priors on coefficients if (has_intercept == 1) { if (prior_dist_for_intercept == 1) - target+= normal_lpdf(alpha | prior_mean_for_intercept, prior_scale_for_intercept); + target+= normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); else if (prior_dist_for_intercept == 2) - target+= student_t_lpdf(alpha | prior_df_for_intercept, prior_mean_for_intercept, prior_scale_for_intercept); + target+= student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, prior_scale_for_intercept); /* else prior_dist_intercept is 0 and nothing is added */ } if (K > 0) { @@ -132,6 +142,9 @@ model { } generated quantities { real mean_PPD = 0; + real alpha[has_intercept]; + if (has_intercept) + alpha[1] = gamma[1] - dot_product(beta, xbar); { vector[N] eta; if (has_intercept == 1) { From 4c0f42dde5cb4575586bf87dd482e93ddb942e03 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Fri, 4 Aug 2017 17:15:14 -0400 Subject: [PATCH 09/59] using chunk functions for meanPPD --- exec/spatial.stan | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/exec/spatial.stan b/exec/spatial.stan index e38e0c09e..fc04c4317 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -153,17 +153,22 @@ generated quantities { else { eta = X * beta + psi; } - for (n in 1:N) { - if (family == 1) - mean_PPD = mean_PPD + normal_rng(eta[n], nu[1]); - else if (family == 2) { + if (family == 1) { + eta = linkinv_gauss(eta, link); + for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], nu[1]); + } + else if (family == 2) { + eta = linkinv_count(eta, link); + for (n in 1:N) { if (eta[n] < poisson_max) mean_PPD = mean_PPD + poisson_log_rng(eta[n]); else mean_PPD = mean_PPD + normal_rng(eta[n], sqrt(eta[n])); } - else if (family == 3) - mean_PPD = mean_PPD + binomial_rng(trials[n], inv_logit(eta[n])); + } + else if (family == 3) { + eta = linkinv_binom(eta, link); + for (n in 1:N) mean_PPD = mean_PPD + binomial_rng(trials[n], inv_logit(eta[n])); } } mean_PPD = mean_PPD / N; From 2070bb4ea21d765fab936cd215f19c62d1b35ecc Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 6 Aug 2017 17:13:50 -0400 Subject: [PATCH 10/59] demeaning, QR decom, and posterior methods work --- R/posterior_predict.R | 2 +- R/stan_besag.R | 2 +- R/stan_bym.R | 10 +++------- R/stan_spatial.fit.R | 13 +++++++++---- R/stanreg.R | 5 +---- exec/spatial.stan | 42 +++++++++++++++++++++--------------------- 6 files changed, 36 insertions(+), 38 deletions(-) diff --git a/R/posterior_predict.R b/R/posterior_predict.R index 3e9e43aff..7adb6df2d 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -167,7 +167,7 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, } else { ppargs <- pp_args(object, data = pp_eta(object, dat, draws)) } - if (!is_polr(object) && is.binomial(family(object)$family)) + if (!is_polr(object) && is.binomial(family(object)$family)) # Simplify this ppargs$trials <- pp_binomial_trials(object, newdata) if (is(object, "car") && is.binomial(family(object)$family)) ppargs$trials <- object$trials diff --git a/R/stan_besag.R b/R/stan_besag.R index 07f70228f..4c6e072c7 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -36,7 +36,7 @@ stan_besag <- function(formula, QR = FALSE) { stan_function <- "stan_besag" if (!requireNamespace("INLA", quietly = TRUE)) - stop(paste("Please install the INLA package before using", stan_function)) + stop(paste("Please install and load the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) family <- validate_family(family) diff --git a/R/stan_bym.R b/R/stan_bym.R index ecffb7ed9..aadd987d5 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -23,7 +23,7 @@ #' stan_bym <- function(formula, - family = c("binomial", "poisson", "gaussian"), + family = gaussian(), data, trials = NULL, W, @@ -39,7 +39,7 @@ stan_bym <- function(formula, stop(paste("Please install the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) - family <- match.arg(family) + family <- validate_family(family) mf <- model.frame(mc, data) Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) @@ -64,14 +64,10 @@ stan_bym <- function(formula, call = match.call(), stan_function = stan_function) - if (family == "binomial") { + if (family$family == "binomial") { fit$family <- binomial(link = "logit") fit$trials <- trials } - else if (family == "poisson") - fit$family <- poisson(link = "log") - else if (family == "gaussian") - fit$family <- gaussian(link = "identity") out <- stanreg(fit) structure(out, class = c("stanreg", "car")) } diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 0cc22b6ee..5bfb9f85a 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -58,11 +58,16 @@ stan_spatial.fit <- function(x, y, w, y_int <- y if (family$family == "binomial") { family_num <- 3 + if (is.null(trials) | any(y > trials)) + stop("Outcome values must be less than or equal to the corresponding value in `trials`.") + } else { # poisson trials <- rep(0, length(y)) family_num <- 2 } + if(!is.integer(y_int)) + stop("Outcome must an integer for count likelihoods.") } if (stan_function == "stan_besag") @@ -172,7 +177,7 @@ stan_spatial.fit <- function(x, y, w, E_n = nrow(edges), family = family_num, link = link, - X = if (has_intercept) x[,-1] else x , # include decorrelation and use xtemp + X = xtemp, xbar = as.array(xbar), y_real = y_real, y_int = y_int, @@ -223,7 +228,7 @@ stan_spatial.fit <- function(x, y, w, } standata$scaling_factor <- create_scaling_factor(standata, W) - pars <- c(if (has_intercept) "alpha", "beta", "tau", if(mod == 2) c("sigma"), if(family$family == "gaussian") "nu", + pars <- c(if (has_intercept) "alpha", "beta", "rho", if(mod == 2) c("tau"), if(family$family == "gaussian") "sigma", "mean_PPD", "psi") prior_info <- summarize_spatial_prior( @@ -269,8 +274,8 @@ stan_spatial.fit <- function(x, y, w, } } new_names <- c(if (has_intercept) "(Intercept)", - colnames(xtemp), "tau", if(mod == 2) c("sigma"), - if(family$family == "gaussian") "nu", "mean_PPD", "log-posterior", paste0("psi[", 1:standata$N, "]")) + colnames(xtemp), "rho", if(mod == 2) c("tau"), + if(family$family == "gaussian") "sigma", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") stanfit@sim$fnames_oi <- new_names return(structure(stanfit, prior.info = prior_info)) } diff --git a/R/stanreg.R b/R/stanreg.R index 53f6c23fa..1889605b2 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -23,7 +23,6 @@ stanreg <- function(object) { opt <- object$algorithm == "optimizing" mer <- !is.null(object$glmod) # used stan_(g)lmer - is_car <- object$stan_function %in% c("stan_besag", "stan_bym") stanfit <- object$stanfit family <- object$family y <- object$y @@ -32,6 +31,7 @@ stanreg <- function(object) { nobs <- NROW(y) ynames <- if (is.matrix(y)) rownames(y) else names(y) + is_car <- object$stan_function %in% c("stan_besag", "stan_bym") is_betareg <- is.beta(family$family) if (is_betareg) { family_phi <- object$family_phi # pull out phi family/link @@ -156,9 +156,6 @@ stanreg <- function(object) { out$phi <- phi } if (is_car) { - # CARBayes doesn't include the scale parameters in out$coefficients so not sure if we want to. - # exclude <- c(1:nvars, psi_indx, which(rownames(stan_summary) %in% c("mean_PPD", "log-posterior"))) - # out$coefficients = c(coefs, stan_summary[-exclude, select_median(object$algorithm)]) out$psi <- psi out$trials <- object$trials } diff --git a/exec/spatial.stan b/exec/spatial.stan index fc04c4317..086899d2c 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -31,7 +31,7 @@ data { real prior_df_for_intercept; vector[K] prior_mean; vector[K] prior_scale; - real prior_df; + real prior_df[K]; real prior_mean_aux; real prior_scale_aux; real prior_df_aux; @@ -52,9 +52,9 @@ parameters { vector[K] beta; // predictors on covariates (including intercept) vector[N] theta_raw[mod == 2? 1 : 0]; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) - real tau; // variance i.e. tau^2 - real sigma[mod == 2? 1 : 0]; // variance i.e. sigma^2 - real nu[family == 1? 1 : 0]; // applies only if family is gaussian + real rho; // variance i.e. rho^2 + real tau[mod == 2? 1 : 0]; // variance i.e. tau^2 + real sigma[family == 1? 1 : 0]; // applies only if family is gaussian } transformed parameters { vector[N] phi; // non-centered random effect (spatial) @@ -62,10 +62,10 @@ transformed parameters { phi[1:(N - 1)] = phi_raw; phi[N] = -sum(phi_raw); if (mod == 1) - psi = phi * sqrt(inv(tau)); + psi = phi * sqrt(inv(rho)); else if (mod == 2) - psi = sigma[1]*(sqrt(1-tau)*theta_raw[1] + sqrt(tau/scaling_factor)*phi); - // psi = sigma[1]*(sqrt(tau)*theta_raw[1] + sqrt(1-tau)*scaling_factor*phi); + psi = tau[1]*(sqrt(1-rho)*theta_raw[1] + sqrt(rho/scaling_factor)*phi); + // psi = tau[1]*(sqrt(rho)*theta_raw[1] + sqrt(1-rho)*scaling_factor*phi); } model { vector[N] eta; // linear predictor + spatial random effects @@ -77,7 +77,7 @@ model { // likelihoods if (family == 1) { eta = linkinv_gauss(eta, link); - target+= normal_lpdf(y_real | eta, nu[1]); + target+= normal_lpdf(y_real | eta, sigma[1]); } else if (family == 2) { eta = linkinv_count(eta, link); @@ -108,35 +108,35 @@ model { } if (mod == 2) { // BYM target+= normal_lpdf(theta_raw[1] | 0, 1); - target+= beta_lpdf(tau | shape1_tau, shape2_tau); + target+= beta_lpdf(rho | shape1_tau, shape2_tau); if (prior_dist_aux == 1) - target+= normal_lpdf(sigma | prior_mean_aux, prior_scale_aux); + target+= normal_lpdf(tau | prior_mean_aux, prior_scale_aux); else if (prior_dist_aux == 2) - target+= student_t_lpdf(sigma | prior_df_aux, prior_mean_aux, prior_scale_aux); + target+= student_t_lpdf(tau | prior_df_aux, prior_mean_aux, prior_scale_aux); else if (prior_dist_aux == 3) - target+= cauchy_lpdf(sigma | prior_mean_aux, prior_scale_aux); + target+= cauchy_lpdf(tau | prior_mean_aux, prior_scale_aux); else if (prior_dist_aux == 4) - target+= exponential_lpdf(sigma | prior_rate_aux); + target+= exponential_lpdf(tau | prior_rate_aux); /* else prior_dist_aux is 0 and nothing is added */ } else { if (prior_dist_tau == 1) - target+= normal_lpdf(tau | prior_mean_tau, prior_scale_tau); + target+= normal_lpdf(rho | prior_mean_tau, prior_scale_tau); else if (prior_dist_tau == 2) - target+= student_t_lpdf(tau | prior_df_tau, prior_mean_tau, prior_scale_tau); + target+= student_t_lpdf(rho | prior_df_tau, prior_mean_tau, prior_scale_tau); else if (prior_dist_tau == 3) - target+= cauchy_lpdf(tau | prior_mean_tau, prior_scale_tau); + target+= cauchy_lpdf(rho | prior_mean_tau, prior_scale_tau); else if (prior_dist_tau == 4) - target+= exponential_lpdf(tau | prior_rate_tau); + target+= exponential_lpdf(rho | prior_rate_tau); /* else prior_dist_tau is 0 and nothing is added */ } if (family == 1) { // prior on sd if outcome is gaussian if (prior_dist_nu == 1) - target+= normal_lpdf(nu[1] | prior_mean_nu, prior_scale_nu); + target+= normal_lpdf(sigma[1] | prior_mean_nu, prior_scale_nu); else if (prior_dist_nu == 2) - target+= student_t_lpdf(nu[1] | prior_df_nu, prior_mean_nu, prior_scale_nu); + target+= student_t_lpdf(sigma[1] | prior_df_nu, prior_mean_nu, prior_scale_nu); else if (prior_dist_nu == 3) - target+= cauchy_lpdf(nu[1] | prior_mean_nu, prior_scale_nu); + target+= cauchy_lpdf(sigma[1] | prior_mean_nu, prior_scale_nu); /* else prior_dist_nu is 0 and nothing is added */ } } @@ -155,7 +155,7 @@ generated quantities { } if (family == 1) { eta = linkinv_gauss(eta, link); - for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], nu[1]); + for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], sigma[1]); } else if (family == 2) { eta = linkinv_count(eta, link); From fcc8d713585c5245ab88362e03fbdcc34b298f12 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 6 Aug 2017 20:52:57 -0400 Subject: [PATCH 11/59] get prior summary working for CAR models --- R/prior_summary.R | 24 +++++ R/stan_besag.R | 8 +- R/stan_bym.R | 4 +- R/stan_glm.fit.R | 2 +- R/stan_spatial.fit.R | 213 ++++++++++++++++++++++++++++--------------- exec/spatial.stan | 68 ++++++-------- 6 files changed, 199 insertions(+), 120 deletions(-) diff --git a/R/prior_summary.R b/R/prior_summary.R index 0ea372737..c8282872a 100644 --- a/R/prior_summary.R +++ b/R/prior_summary.R @@ -176,6 +176,26 @@ print.prior_summary.stanreg <- function(x, digits, ...) { ", rate = ", .fr2(p$rate), ")")) } + # unique to stan_besag/stan_bym + if (!is.null(x[["prior_sigma"]])) + .print_scalar_prior( + x[["prior_sigma"]], + txt = paste0("\nSigma", if (!sparse) " (after predictors centered)"), + formatters + ) + if (!is.null(x[["prior_rho"]])) + .print_scalar_prior( + x[["prior_rho"]], + txt = paste0("\nRho", if (!sparse) " (after predictors centered)"), + formatters + ) + if (!is.null(x[["prior_tau"]])) + .print_scalar_prior( + x[["prior_tau"]], + txt = paste0("\nTau", if (!sparse) " (after predictors centered)"), + formatters + ) + cat("\n------\n") cat("See help('prior_summary.stanreg') for more details") invisible(x) @@ -224,11 +244,15 @@ used.sparse <- function(x) { stopifnot(length(formatters) == 2) .f1 <- formatters[[1]] .f2 <- formatters[[2]] + cat(paste0("\n", txt, "\n ~"), if (is.na(p$dist)) { "flat" } else if (p$dist == "exponential") { paste0(p$dist,"(rate = ", .f1(p$rate), ")") + } else if (p$dist == "beta") { + paste0(p$dist,"(shape1 = ", .f1(p$shape1), + ", shape2 = ", .f1(p$shape1), ")") } else { # normal, student_t, cauchy if (is.null(p$df)) { paste0(p$dist,"(location = ", .f1(p$location), diff --git a/R/stan_besag.R b/R/stan_besag.R index 4c6e072c7..4e9d66ce9 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -28,8 +28,8 @@ stan_besag <- function(formula, trials = NULL, W, ..., - prior = normal(), prior_intercept = normal(), prior_tau = normal(), - prior_nu = NULL, + prior = normal(), prior_intercept = normal(), + prior_sigma = NULL, prior_rho = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, @@ -51,8 +51,8 @@ stan_besag <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, - prior_tau = prior_tau, - prior_nu = prior_nu, + prior_sigma = prior_sigma, + prior_rho = prior_rho, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/R/stan_bym.R b/R/stan_bym.R index aadd987d5..187bed452 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -29,7 +29,7 @@ stan_bym <- function(formula, W, ..., prior = normal(), prior_intercept = normal(), - prior_sigma = normal(), prior_tau = beta(), prior_nu = NULL, + prior_sigma = NULL, prior_rho = beta(0.5,0.5), prior_tau = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, @@ -50,7 +50,7 @@ stan_bym <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, - prior_sigma = prior_sigma, prior_tau = prior_tau, prior_nu = prior_nu, + prior_sigma = prior_sigma, prior_rho = prior_rho, prior_tau = prior_tau, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/R/stan_glm.fit.R b/R/stan_glm.fit.R index 829971c6f..471682c36 100644 --- a/R/stan_glm.fit.R +++ b/R/stan_glm.fit.R @@ -242,7 +242,7 @@ stan_glm.fit <- if (length(weights) > 0 && all(weights == 1)) weights <- double() if (length(offset) > 0 && all(offset == 0)) offset <- double() - + # create entries in the data block of the .stan file standata <- nlist( N = nrow(xtemp), diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 5bfb9f85a..0ee92e10e 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -24,7 +24,7 @@ stan_spatial.fit <- function(x, y, w, stan_function = c("stan_besag", "stan_bym"), ..., prior = normal(), prior_intercept = normal(), - prior_sigma = NULL, prior_tau = NULL, prior_nu = NULL, + prior_sigma = NULL, prior_rho = NULL, prior_tau = NULL, prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, @@ -100,50 +100,71 @@ stan_spatial.fit <- function(x, y, w, for (i in names(prior_intercept_stuff)) # prior_{dist, mean, scale, df, autoscale}_for_intercept assign(i, prior_intercept_stuff[[i]]) - # Deal with prior_tau and prior_sigma + # Deal with prior_rho and prior_sigma if (stan_function == "stan_bym") { - prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, family$link, default_scale = 1, - ok_dists = ok_scale_dists) - names(prior_sigma_stuff) <- paste0(names(prior_sigma_stuff), - "_for_aux") - for (i in names(prior_sigma_stuff)) # prior_{dist, mean, scale, df, autoscale} - assign(i, prior_sigma_stuff[[i]]) - - prior_tau_stuff <- list(alpha = prior_tau$alpha, beta = prior_tau$beta) - prior_dist_for_tau <- 0 - prior_mean_for_tau <- 0 - prior_scale_for_tau <- 1 - prior_df_for_tau <- 1 - } - else if (stan_function == "stan_besag") { + has_tau <- 1 prior_tau_stuff <- handle_glm_prior(prior_tau, nvars = 1, family$link, default_scale = 1, ok_dists = ok_scale_dists) names(prior_tau_stuff) <- paste0(names(prior_tau_stuff), - "_for_tau") + "_for_tau") for (i in names(prior_tau_stuff)) # prior_{dist, mean, scale, df, autoscale} assign(i, prior_tau_stuff[[i]]) - prior_tau_stuff$alpha <- 0 - prior_tau_stuff$beta <- 0 - prior_dist_for_aux <- 0 - prior_mean_for_aux <- 0 - prior_scale_for_aux <- 1 - prior_df_for_aux <- 1 + # In BYM rho is constrained so appropriate prior is Beta dist. + if (is.null(prior_rho)) { + prior_dist_for_rho <- 0 + prior_rho$alpha <- 1 + prior_rho$beta <- 1 + prior_dist_name_for_rho <- NA + } + else { + prior_dist_for_rho <- 1 + prior_dist_name_for_rho <- "beta" + } + + prior_mean_for_rho <- 0 + prior_scale_for_rho <- 1 + prior_df_for_rho <- 1 + prior_rho_stuff <- list(prior_dist_name_for_rho = prior_dist_name_for_rho, + shape1 = prior_rho$alpha, + shape2 = prior_rho$beta, + prior_mean_for_rho = prior_mean_for_rho, + prior_scale_for_rho = prior_scale_for_rho, + prior_df_for_rho = prior_df_for_rho + ) + } + else if (stan_function == "stan_besag") { + has_tau <- 0 + prior_rho_stuff <- handle_glm_prior(prior_rho, nvars = 1, family$link, default_scale = 1, + ok_dists = ok_scale_dists) + names(prior_rho_stuff) <- paste0(names(prior_rho_stuff), + "_for_rho") + for (i in names(prior_rho_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_rho_stuff[[i]]) + + prior_rho_stuff$shape1 <- 1 + prior_rho_stuff$shape2 <- 1 + prior_dist_for_tau <- 0 + prior_mean_for_tau <- 0 + prior_scale_for_tau <- 1 + prior_df_for_tau <- 1 } - # Deal with prior_nu... needs more dist options + # Deal with prior_sigma... needs more dist options if (family$family == "gaussian") { - prior_nu_stuff <- handle_glm_prior(prior_nu, nvars = 1, family$link, default_scale = 1, + has_sigma <- 1 + prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, family$link, default_scale = 1, ok_dists = ok_dists) - names(prior_nu_stuff) <- paste0(names(prior_nu_stuff), - "_for_nu") - for (i in names(prior_nu_stuff)) # prior_{dist, mean, scale, df, autoscale} - assign(i, prior_nu_stuff[[i]]) + names(prior_sigma_stuff) <- paste0(names(prior_sigma_stuff), + "_for_sigma") + for (i in names(prior_sigma_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_sigma_stuff[[i]]) } else { - prior_dist_for_nu <- 0 - prior_mean_for_nu <- 0 - prior_scale_for_nu <- 1 - prior_df_for_nu <- 1 + has_sigma <- 0 + prior_dist_for_sigma <- 0 + prior_mean_for_sigma <- 0 + prior_scale_for_sigma <- 1 + prior_df_for_sigma <- 1 } # QR decomposition for x @@ -182,30 +203,28 @@ stan_spatial.fit <- function(x, y, w, y_real = y_real, y_int = y_int, trials = trials, - shape1_tau = c(prior_tau_stuff$alpha), - shape2_tau = c(prior_tau_stuff$beta), + shape1_rho = c(prior_rho_stuff$shape1), + shape2_rho = c(prior_rho_stuff$shape2), prior_dist_for_intercept = prior_dist_for_intercept, prior_dist = prior_dist, + prior_dist_rho = prior_dist_for_rho, prior_dist_tau = prior_dist_for_tau, - prior_dist_aux = prior_dist_for_aux, - prior_dist_nu = prior_dist_for_nu, + prior_dist_sigma = prior_dist_for_sigma, prior_mean_for_intercept = c(prior_mean_for_intercept), prior_scale_for_intercept = c(prior_scale_for_intercept), prior_df_for_intercept = c(prior_df_for_intercept), prior_mean = as.array(prior_mean), prior_scale = as.array(prior_scale), prior_df = c(prior_df), - prior_mean_aux = c(prior_mean_for_aux), - prior_scale_aux = c(prior_scale_for_aux), - prior_df_aux = c(prior_df_for_aux), - prior_rate_aux = 0, # FIX ME!!! prior_mean_tau = c(prior_mean_for_tau), prior_scale_tau = c(prior_scale_for_tau), prior_df_tau = c(prior_df_for_tau), - prior_rate_tau = 0, # FIX ME!!! - prior_mean_nu = c(prior_mean_for_nu), - prior_scale_nu = c(prior_scale_for_nu), - prior_df_nu = c(prior_df_for_nu), + prior_mean_rho = c(prior_mean_for_rho), + prior_scale_rho = c(prior_scale_for_rho), + prior_df_rho = c(prior_df_for_rho), + prior_mean_sigma = c(prior_mean_for_sigma), + prior_scale_sigma = c(prior_scale_for_sigma), + prior_df_sigma = c(prior_df_for_sigma), has_intercept = has_intercept, mod = mod) standata$X <- array(standata$X, dim = c(standata$N, standata$K)) @@ -234,16 +253,19 @@ stan_spatial.fit <- function(x, y, w, prior_info <- summarize_spatial_prior( user_prior = prior_stuff, user_prior_intercept = prior_intercept_stuff, + user_prior_rho = prior_rho_stuff, + user_prior_sigma = prior_sigma_stuff, user_prior_tau = prior_tau_stuff, - user_prior_nu = prior_nu_stuff, - user_prior_aux = prior_aux_stuff, has_intercept = has_intercept, has_predictors = nvars > 0, + has_sigma = has_sigma, + has_rho = 1, + has_tau = has_tau, adjusted_prior_scale = prior_scale, adjusted_prior_intercept_scale = prior_scale_for_intercept, - adjusted_prior_scale_tau = prior_scale_for_tau, - adjusted_prior_scale_nu = prior_scale_for_nu, - adjusted_prior_scale_aux = prior_scale_for_aux) + adjusted_prior_scale_rho = prior_scale_for_rho, + adjusted_prior_scale_sigma = prior_scale_for_sigma, + adjusted_prior_scale_tau = prior_scale_for_tau) stanfit <- stanmodels$spatial @@ -284,16 +306,19 @@ stan_spatial.fit <- function(x, y, w, summarize_spatial_prior <- function(user_prior, user_prior_intercept, + user_prior_sigma, + user_prior_rho, user_prior_tau, - user_prior_nu, - user_prior_aux, has_intercept, has_predictors, + has_sigma, + has_rho, + has_tau, adjusted_prior_scale, adjusted_prior_intercept_scale, - adjusted_prior_scale_tau, - adjusted_prior_scale_nu, - adjusted_prior_scale_aux) { + adjusted_prior_scale_sigma, + adjusted_prior_scale_rho, + adjusted_prior_scale_tau) { rescaled_coef <- user_prior$prior_autoscale && has_predictors && !is.na(user_prior$prior_dist_name) && @@ -318,6 +343,33 @@ summarize_spatial_prior <- function(user_prior, user_prior_intercept$prior_dist_name_for_intercept <- "student_t" } } + if (has_sigma && + user_prior_sigma$prior_dist_name_for_sigma %in% "t") { + if (all(user_prior_sigma$prior_df_for_sigma == 1)) { + user_prior_sigma$prior_dist_name_for_sigma <- "cauchy" + } else { + user_prior_sigma$prior_dist_name_for_sigma <- "student_t" + } + } + + if (has_rho && + user_prior_rho$prior_dist_name_for_rho %in% "t") { + if (all(user_prior_rho$prior_df_for_rho == 1)) { + user_prior_rho$prior_dist_name_for_rho <- "cauchy" + } else if (has_rho && user_prior_rho$prior_dist_name_for_rho == "beta") { + user_prior_rho$prior_dist_name_for_rho <- "beta" + } else { + user_prior_rho$prior_dist_name_for_rho <- "student_t" + } + } + if (has_tau && + user_prior_tau$prior_dist_name_for_tau %in% "t") { + if (all(user_prior_tau$prior_df_for_tau == 1)) { + user_prior_tau$prior_dist_name_for_tau <- "cauchy" + } else { + user_prior_tau$prior_dist_name_for_tau <- "student_t" + } + } prior_list <- list( prior = if (!has_predictors) NULL else with(user_prior, list( @@ -339,24 +391,39 @@ summarize_spatial_prior <- function(user_prior, adjusted_prior_intercept_scale else NULL, df = if (prior_dist_name_for_intercept %in% "student_t") prior_df_for_intercept else NULL - ))#, - #prior_aux = - # if (!has_phi) NULL else with(user_prior_aux, list( - # dist = prior_dist_name_for_aux, - # location = if (!is.na(prior_dist_name_for_aux) && - # prior_dist_name_for_aux != "exponential") - # prior_mean_for_aux else NULL, - # scale = if (!is.na(prior_dist_name_for_aux) && - # prior_dist_name_for_aux != "exponential") - # prior_scale_for_aux else NULL, - # df = if (!is.na(prior_dist_name_for_aux) && - # prior_dist_name_for_aux %in% "student_t") - # prior_df_for_aux else NULL, - # rate = if (!is.na(prior_dist_name_for_aux) && - # prior_dist_name_for_aux %in% "exponential") - # 1 / prior_scale_for_aux else NULL, - # aux_name = "phi" - # )) + )), + prior_sigma = + if (!has_sigma) NULL else with(user_prior_sigma, list( + dist = prior_dist_name_for_sigma, + location = prior_mean_for_sigma, + scale = prior_scale_for_sigma, + adjusted_scale = if (rescaled_int) + adjusted_prior_sigma_scale else NULL, + df = if (prior_dist_name_for_sigma %in% "student_t") + prior_df_for_sigma else NULL + )), + prior_rho = + if (!has_rho) NULL else with(user_prior_rho, list( + dist = prior_dist_name_for_rho, + location = prior_mean_for_rho, + scale = prior_scale_for_rho, + shape1 = shape1, + shape2 = shape2, + adjusted_scale = if (rescaled_int) + adjusted_prior_rho_scale else NULL, + df = if (prior_dist_name_for_rho %in% "student_t") + prior_df_for_rho else NULL + )), + prior_tau = + if (!has_tau) NULL else with(user_prior_tau, list( + dist = prior_dist_name_for_tau, + location = prior_mean_for_tau, + scale = prior_scale_for_tau, + adjusted_scale = if (rescaled_int) + adjusted_prior_tau_scale else NULL, + df = if (prior_dist_name_for_tau %in% "student_t") + prior_df_for_tau else NULL + )) ) return(prior_list) } diff --git a/exec/spatial.stan b/exec/spatial.stan index 086899d2c..f708590c1 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -16,33 +16,31 @@ data { int link; int E_n; // number of adjacency pairs int edges[E_n, 2]; // adjacency pairs - real shape1_tau; // priors - real shape2_tau; // priors + real shape1_rho; // priors + real shape2_rho; // priors int has_intercept; int mod; // 1 = besag (icar); 2 = bym real scaling_factor; int prior_dist_for_intercept; int prior_dist; - int prior_dist_aux; int prior_dist_tau; - int prior_dist_nu; + int prior_dist_rho; + int prior_dist_sigma; real prior_mean_for_intercept; real prior_scale_for_intercept; real prior_df_for_intercept; vector[K] prior_mean; vector[K] prior_scale; real prior_df[K]; - real prior_mean_aux; - real prior_scale_aux; - real prior_df_aux; - real prior_rate_aux; real prior_mean_tau; real prior_scale_tau; real prior_df_tau; - real prior_rate_tau; - real prior_mean_nu; - real prior_scale_nu; - real prior_df_nu; + real prior_mean_rho; + real prior_scale_rho; + real prior_df_rho; + real prior_mean_sigma; + real prior_scale_sigma; + real prior_df_sigma; } transformed data { real poisson_max = 30 * log(2); @@ -102,42 +100,32 @@ model { target+= normal_lpdf(beta | prior_mean, prior_scale); else if (prior_dist == 2) target+= student_t_lpdf(beta | prior_df, prior_mean, prior_scale); - else if (prior_dist == 3) - target+= cauchy_lpdf(beta | prior_mean, prior_scale); /* else prior_dist is 0 and nothing is added */ } if (mod == 2) { // BYM - target+= normal_lpdf(theta_raw[1] | 0, 1); - target+= beta_lpdf(rho | shape1_tau, shape2_tau); - if (prior_dist_aux == 1) - target+= normal_lpdf(tau | prior_mean_aux, prior_scale_aux); - else if (prior_dist_aux == 2) - target+= student_t_lpdf(tau | prior_df_aux, prior_mean_aux, prior_scale_aux); - else if (prior_dist_aux == 3) - target+= cauchy_lpdf(tau | prior_mean_aux, prior_scale_aux); - else if (prior_dist_aux == 4) - target+= exponential_lpdf(tau | prior_rate_aux); - /* else prior_dist_aux is 0 and nothing is added */ - } - else { + target+= normal_lpdf(theta_raw[1] | 0, 1); // unstructured (random) effect + if (prior_dist_rho == 1) + target+= beta_lpdf(rho | shape1_rho, shape2_rho); + /* else prior_dist_rho is 0 and nothing is added */ if (prior_dist_tau == 1) - target+= normal_lpdf(rho | prior_mean_tau, prior_scale_tau); + target+= normal_lpdf(tau | prior_mean_tau, prior_scale_tau); else if (prior_dist_tau == 2) - target+= student_t_lpdf(rho | prior_df_tau, prior_mean_tau, prior_scale_tau); - else if (prior_dist_tau == 3) - target+= cauchy_lpdf(rho | prior_mean_tau, prior_scale_tau); - else if (prior_dist_tau == 4) - target+= exponential_lpdf(rho | prior_rate_tau); + target+= student_t_lpdf(tau | prior_df_tau, prior_mean_tau, prior_scale_tau); /* else prior_dist_tau is 0 and nothing is added */ } + else { // besag + if (prior_dist_rho == 1) + target+= normal_lpdf(rho | prior_mean_rho, prior_scale_rho); + else if (prior_dist_rho == 2) + target+= student_t_lpdf(rho | prior_df_rho, prior_mean_rho, prior_scale_rho); + /* else prior_dist_rho is 0 and nothing is added */ + } if (family == 1) { // prior on sd if outcome is gaussian - if (prior_dist_nu == 1) - target+= normal_lpdf(sigma[1] | prior_mean_nu, prior_scale_nu); - else if (prior_dist_nu == 2) - target+= student_t_lpdf(sigma[1] | prior_df_nu, prior_mean_nu, prior_scale_nu); - else if (prior_dist_nu == 3) - target+= cauchy_lpdf(sigma[1] | prior_mean_nu, prior_scale_nu); - /* else prior_dist_nu is 0 and nothing is added */ + if (prior_dist_sigma == 1) + target+= normal_lpdf(sigma[1] | prior_mean_sigma, prior_scale_sigma); + else if (prior_dist_sigma == 2) + target+= student_t_lpdf(sigma[1] | prior_df_sigma, prior_mean_sigma, prior_scale_sigma); + /* else prior_dist_sigma is 0 and nothing is added */ } } generated quantities { From 34f03e6bbf84bcdad9487251056cb8716612c949 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 7 Aug 2017 00:59:05 -0400 Subject: [PATCH 12/59] adding documentation for CAR models --- R/datasets.R | 17 +++++++++++- R/stan_besag.R | 62 +++++++++++++++++++++++++++++++++++++++++-- R/stan_bym.R | 64 ++++++++++++++++++++++++++++++++++++++++++--- data/lattice10.rda | Bin 0 -> 3755 bytes 4 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 data/lattice10.rda diff --git a/R/datasets.R b/R/datasets.R index fb10cf192..58e1aa8d2 100644 --- a/R/datasets.R +++ b/R/datasets.R @@ -20,7 +20,7 @@ #' Small datasets for use in \pkg{rstanarm} examples and vignettes. #' #' @name rstanarm-datasets -#' @aliases kidiq roaches wells bball1970 bball2006 mortality tumors radon +#' @aliases kidiq roaches wells bball1970 bball2006 mortality tumors radon lattice10 #' @format #' \describe{ #' \item{\code{bball1970}}{ @@ -139,6 +139,21 @@ #' \item \code{educ} Years of education (head of household) #' } #' } +#' \item{\code{lattice10}}{ +#' The \code{grid_sim} SpatialPolygonsDataFrame object is an artificial lattice +#' that has been used to simulate spatial dependence as a Gaussian Markov Random +#' Field (GMRF). +#' +#' Souce: Simulated data +#' +#' 100 obs. of 3 variables +#' \itemize{ +#' \item \code{gmrf} GMRF data simulated using Cholesky decomposition sampling from +#' the precision form of the Multivariate Normal distribution centered at zero. +#' \item \code{r} X-position of a location on the grid (origin is at the bottom-left). +#' \item \code{c} Y-position of a location on the grid (origin is at the bottom-left). +#' } +#' } #' } #' #' @references diff --git a/R/stan_besag.R b/R/stan_besag.R index 4e9d66ce9..7f346d057 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -18,9 +18,67 @@ #' Bayesian CAR Intrinsic Autoregressive models via Stan #' #' Spatial regression modeling with an intrinsic conditional autoregressive (ICAR) prior. -#' + +#' @rdname stan_besag #' @export #' +#' @template return-stanreg-object +#' @template return-stanfit-object +#' @template see-also +#' @template args-formula-data-subset +#' @template args-same-as +#' @template args-same-as-rarely +#' @template args-x-y +#' @template args-dots +#' @template args-prior_intercept +#' @template args-priors +#' @template args-prior_PD +#' @template args-algorithm +#' @template args-adapt_delta +#' @template args-QR +#' +#' @param family Distribution associated with the outcome. Gaussian, Binomial, +#' and Poisson families are supported. +#' @param trials If \code{family = binomial()} then a vector of trials (equal +#' in length to the outcome) must be declared. +#' @param W An N-by-N spatial weight matrix. +#' @param prior_rho The prior distribution on the variance of the non-centered structured (spatial) effect. +#' @param prior_sigma The prior distribution on the standard deviation of the outcome if \code{family = gaussian()} is declared. +#' +#' @details The \code{stan_besag} model is similar to the analogous model in R-INLA. However, instead of using the integrated Laplace approximation (INLA) method, full Bayesian estimation is performed (if \code{algorithm} is \code{"sampling"}) via MCMC. The model includes priors on the intercept, regression coefficients, and the relevant scale parameters. The \code{stan_besag} function calls the workhorse \code{stan_spatial.fit} function, but it is also possible to call the latter directly. +#' +#' @seealso The vignette for \code{stan_besag}. +#' +#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. arXiv preprint arXiv:1601.01180. +#' +#' @examples +#' ### Simulated Data on a Lattice +#' +#' data("lattice10", package = "rstanarm") +#' +#' # plot GMRF +#' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) +#' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), +#' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) +#' +#' # Convert a spatial polygon to an N-by-N weight matrix +#' sp2weightmatrix <- function(spatialpolygon) { +#' spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +#' } +#' +#' # convert spatial object to neighborhood matrix +#' W <- sp2weightmatrix(grid_sim) +#' # W_sparse <- Matrix(W, sparse = TRUE, dimnames = list(NULL,NULL)) +#' +#' # simulate predictor/outcome +#' x <- rnorm(nrow(W), 3, 1) +#' spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) +#' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) +#' +#' # fit the model +#' fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' pp_check(fit_besag) +#' stan_besag <- function(formula, family = gaussian(), @@ -29,7 +87,7 @@ stan_besag <- function(formula, W, ..., prior = normal(), prior_intercept = normal(), - prior_sigma = NULL, prior_rho = NULL, + prior_sigma = NULL, prior_rho = normal(), prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, diff --git a/R/stan_bym.R b/R/stan_bym.R index 187bed452..e3552e6dd 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -17,10 +17,68 @@ #' Bayesian CAR BYM models via Stan #' -#' Spatial regression modeling with a conditional autoregressive (CAR) prior. -#' +#' Spatial regression modeling with the Besag, York, Mollie conditional autoregressive (CAR) prior. +#' @rdname stan_bym #' @export #' +#' @template return-stanreg-object +#' @template return-stanfit-object +#' @template see-also +#' @template args-formula-data-subset +#' @template args-same-as +#' @template args-same-as-rarely +#' @template args-x-y +#' @template args-dots +#' @template args-prior_intercept +#' @template args-priors +#' @template args-prior_PD +#' @template args-algorithm +#' @template args-adapt_delta +#' @template args-QR +#' +#' @param family Distribution associated with the outcome. Gaussian, Binomial, and Poisson families are supported. +#' @param trials If \code{family = binomial()} then a vector of trials (equal in length to the outcome) must be declared. +#' @param W An N-by-N spatial weight matrix. +#' @param prior_rho The prior on the proportion of the marginal variance that is explained by the structured (spatial) effect. The hyperparameter \code{rho} is in the unit interval so users have the option of declaring a Beta prior distribution or a flat prior. A prior distribution with more mass around 1 is analogous to the prior belief that there exists a strong spatial relationship on the graph. +#' @param prior_tau The prior on the marginal variance contribution of the structured (spatial) and unstructured (random) effect. +#' @param prior_sigma The prior distribution on the standard deviation of the outcome if \code{family = gaussian()} is declared. +#' +#' @details The \code{stan_bym} model is similar to the analogous model in R-INLA. However, instead of using the integrated Laplace approximation (INLA) method, full Bayesian estimation is performed (if \code{algorithm} is \code{"sampling"}) via MCMC. The model includes priors on the intercept, regression coefficients, and the relevant scale/mixing parameters. The \code{stan_bym} function calls the workhorse \code{stan_spatial.fit} function, but it is also possible to call the latter directly. +#' +#' @seealso The vignette for \code{stan_bym}. +#' +#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. arXiv preprint arXiv:1601.01180. +#' +#' Simpson, D., Rue, H., Martins, T.G., Riebler, A. and Sorbye, S.H. (2015). Penalising model component complexity: A principled, practical approach to constructing priors. arXiv preprint arXiv:1403.4630. +#' +#' @examples +#' ### Simulated Data on a Lattice +#' +#' data("lattice10", package = "rstanarm") +#' +#' # plot GMRF +#' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) +#' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), +#' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) +#' +#' # Convert a spatial polygon to an N-by-N weight matrix +#' sp2weightmatrix <- function(spatialpolygon) { +#' spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +#' } +#' +#' # convert spatial object to neighborhood matrix +#' W <- sp2weightmatrix(grid_sim) +#' # W_sparse <- Matrix(W, sparse = TRUE, dimnames = list(NULL,NULL)) +#' +#' # simulate predictor/outcome +#' x <- rnorm(nrow(W), 3, 1) +#' spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) +#' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) +#' +#' # fit the model +#' fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' pp_check(fit_besag) + stan_bym <- function(formula, family = gaussian(), @@ -29,7 +87,7 @@ stan_bym <- function(formula, W, ..., prior = normal(), prior_intercept = normal(), - prior_sigma = NULL, prior_rho = beta(0.5,0.5), prior_tau = NULL, + prior_sigma = NULL, prior_rho = beta(0.5,0.5), prior_tau = normal(), prior_PD = FALSE, algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), adapt_delta = NULL, diff --git a/data/lattice10.rda b/data/lattice10.rda new file mode 100644 index 0000000000000000000000000000000000000000..29ada072ae29a0defd0b641ca743b9ee788e03d2 GIT binary patch literal 3755 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 literal 0 HcmV?d00001 From 1869c9c68f71890f9144d9752d0e4f4c0833c42d Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 7 Aug 2017 18:52:38 -0400 Subject: [PATCH 13/59] adding stan_besag tests; CAR models return 'terms' --- R/pp_data.R | 6 +- R/predict.R | 8 ++ R/stan_besag.R | 4 +- R/stan_bym.R | 8 ++ R/stan_spatial.fit.R | 2 +- R/stanreg-methods.R | 1 - tests/testthat/test_stan_besag.R | 160 +++++++++++++++++++++++++++++++ tests/testthat/test_stan_bym.R | 19 ++++ 8 files changed, 203 insertions(+), 5 deletions(-) create mode 100644 tests/testthat/test_stan_besag.R create mode 100644 tests/testthat/test_stan_bym.R diff --git a/R/pp_data.R b/R/pp_data.R index d21d4c9af..5521568f4 100644 --- a/R/pp_data.R +++ b/R/pp_data.R @@ -50,7 +50,9 @@ pp_data <- offset <- object$offset %ORifNULL% rep(0, nrow(x)) return(nlist(x, offset)) } - + #if (!is.null(newdata) & is(object, "car")) { + # return(nlist(x)) + #} offset <- .pp_data_offset(object, newdata, offset) Terms <- delete.response(terms(object)) m <- model.frame(Terms, newdata, xlev = object$xlevels) @@ -59,7 +61,7 @@ pp_data <- x <- model.matrix(Terms, m, contrasts.arg = object$contrasts) if (is(object, "polr") && !is_scobit(object)) x <- x[,colnames(x) != "(Intercept)", drop = FALSE] - + nlist(x, offset) } diff --git a/R/predict.R b/R/predict.R index bac656691..c6441e4c8 100644 --- a/R/predict.R +++ b/R/predict.R @@ -69,6 +69,14 @@ predict.stanreg <- function(object, stanmat <- as.matrix.stanreg(object) beta <- stanmat[, seq_len(ncol(dat$x))] eta <- linear_predictor(beta, dat$x, dat$offset) + if (is(object, "car")) { + if (nrow(object$x) > nrow(dat$x)) + stop("'newdata' is less than the number of spatial regions.") + psi_indx <- grep("psi", colnames(as.matrix(object$stanfit))) + psi <- as.matrix(object$stanfit)[,psi_indx] + psi <- unname(colMeans(psi)) + eta <- eta + psi + } if (type == "response") { inverse_link <- linkinv(object) eta <- inverse_link(eta) diff --git a/R/stan_besag.R b/R/stan_besag.R index 7f346d057..413f80d9b 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -99,6 +99,7 @@ stan_besag <- function(formula, algorithm <- match.arg(algorithm) family <- validate_family(family) mf <- model.frame(mc, data) + mt <- terms(formula, data = data) Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) @@ -120,7 +121,8 @@ stan_besag <- function(formula, x = X, y = Y, family, formula, - model = mf, + model = mf, + terms = mt, call = match.call(), stan_function = stan_function) diff --git a/R/stan_bym.R b/R/stan_bym.R index e3552e6dd..804190e00 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -99,8 +99,15 @@ stan_bym <- function(formula, algorithm <- match.arg(algorithm) family <- validate_family(family) mf <- model.frame(mc, data) + mt <- terms(formula, data = data) Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) + + if (!is.null(prior_rho)) { + if (prior_rho$dist != "beta") + stop("'prior_rho' must be either beta() or NULL.") + } + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, trials = trials, family = family, @@ -119,6 +126,7 @@ stan_bym <- function(formula, family, formula, model = mf, + terms = mt, call = match.call(), stan_function = stan_function) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 0ee92e10e..7dd3f43be 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -215,7 +215,7 @@ stan_spatial.fit <- function(x, y, w, prior_df_for_intercept = c(prior_df_for_intercept), prior_mean = as.array(prior_mean), prior_scale = as.array(prior_scale), - prior_df = c(prior_df), + prior_df = as.array(prior_df), prior_mean_tau = c(prior_mean_for_tau), prior_scale_tau = c(prior_scale_for_tau), prior_df_tau = c(prior_df_for_tau), diff --git a/R/stanreg-methods.R b/R/stanreg-methods.R index 878fc8eac..cf0c71083 100644 --- a/R/stanreg-methods.R +++ b/R/stanreg-methods.R @@ -368,7 +368,6 @@ terms.stanreg <- function(x, ..., fixed.only = TRUE, random.only = FALSE) { fixed.only <- FALSE if (fixed.only && random.only) stop("'fixed.only' and 'random.only' can't both be TRUE.", call. = FALSE) - Terms <- attr(fr, "terms") if (fixed.only) { Terms <- terms.formula(formula(x, fixed.only = TRUE)) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R new file mode 100644 index 000000000..1401b0f49 --- /dev/null +++ b/tests/testthat/test_stan_besag.R @@ -0,0 +1,160 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# tests can be run using devtools::test() or manually by loading testthat +# package and then running the code below possibly with options(mc.cores = 4). + +if (.Platform$OS.type != "windows" && require(betareg)) { + library(rstanarm) + SEED <- 12345 + set.seed(SEED) + ITER <- 100 + CHAINS <- 2 + + context("stan_besag") + + source(file.path("helpers", "expect_stanreg.R")) + source(file.path("helpers", "SW.R")) + + data("lattice10", package = "rstanarm") + + # Convert a spatial polygon to an N-by-N weight matrix + sp2weightmatrix <- function(spatialpolygon) { + spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) + } + W <- sp2weightmatrix(grid_sim) + x <- rnorm(nrow(W), 2, 1) + spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) + spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) + spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) + spatial_data$y_pois <- rpois(nrow(W), exp(-1 + 1.4 * x + spatial_data$phi)) + spatial_data$trials <- rep(10, nrow(W)) + spatial_data$y_binom <- rbinom(nrow(W), spatial_data$trials, binomial(link = "logit")$linkinv(1 + 0.4 * x + spatial_data$phi)) + + fit_besag <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, W = W, iter = 1e3, chains = 4, + prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), + prior_sigma = normal(0,1)) + + # test family/link combinations + test_that("family = 'gaussian' works", { + SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gauss_inv <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_gauss_ident) + expect_stanreg(fit_gauss_log) + expect_stanreg(fit_gauss_inv) + }) + test_that("family = 'binomial' works", { + SW(fit_binom_logit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_probit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "probit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_cauchit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cauchit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_log <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_cloglog <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cloglog"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_binom_logit) + expect_stanreg(fit_binom_probit) + expect_stanreg(fit_binom_cauchit) + expect_stanreg(fit_binom_log) + expect_stanreg(fit_binom_cloglog) + + }) + test_that("family = 'poisson' works", { + SW(fit_pois_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_pois_log) + expect_stanreg(fit_pois_ident) + expect_stanreg(fit_pois_sqrt) + }) + + # test QR + test_that("QR errors when number of predictors is <= 1", { + expect_error( + stan_besag(y_gauss ~ x, data = spatial_data, family = gaussian(), seed = SEED, QR = TRUE), + "'QR' can only be specified when there are multiple predictors" + ) + }) + + test_that("QR works when number of x and/or z predictors is >= 1", { + SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + expect_stanreg(fit_besag) + }) + + test_that("stan_besag works with QR = TRUE and algorithm = 'optimizing'", { + + }) + + test_that("loo/waic for stan_besag works", { + SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, + family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + }) + + test_that("posterior_predict works for stan_besag", { + SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, + family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + preds_gauss <- posterior_predict(fit_gauss) + preds_binom <- posterior_predict(fit_binom) + preds_pois <- posterior_predict(fit_pois) + }) + + test_that("predict works for stan_besag", { + SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + pred_besag <- predict(fit_besag) + pred_new_besag <- predict(fit_besag, newdata = data.frame(x = rnorm(100, 2, 1))) + }) + + test_that("predict errors if nrow(newdata) < number of spatial regions", { + SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + pred_besag <- predict(fit_besag) + expect_error(pred_new_besag <- predict(fit_besag, newdata = data.frame(x = rnorm(10, 2, 1))), + "'newdata' is less than the number of spatial regions.") + }) + +} \ No newline at end of file diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R new file mode 100644 index 000000000..e1abf2384 --- /dev/null +++ b/tests/testthat/test_stan_bym.R @@ -0,0 +1,19 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# tests can be run using devtools::test() or manually by loading testthat +# package and then running the code below possibly with options(mc.cores = 4). \ No newline at end of file From 44f7e4a92337081649725f8e1d47e29204e63c7d Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 7 Aug 2017 23:14:16 -0400 Subject: [PATCH 14/59] adding vb methods for CAR models; optimizing currently fails --- R/stan_spatial.fit.R | 84 +++++++++++++++++++++++++++++--------------- R/stanreg.R | 1 + 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 7dd3f43be..07856351b 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -268,38 +268,64 @@ stan_spatial.fit <- function(x, y, w, adjusted_prior_scale_tau = prior_scale_for_tau) stanfit <- stanmodels$spatial - - if (algorithm == "sampling") { - sampling_args <- set_sampling_args( - object = stanfit, - prior = prior, - user_dots = list(...), - user_adapt_delta = adapt_delta, - data = standata, - pars = pars, - show_messages = FALSE) - stanfit <- do.call(sampling, sampling_args) + + if (algorithm == "optimizing") { + out <- + optimizing(stanfit, + data = standata, + draws = 1000, + constrained = TRUE, + ...) + check_stanfit(out) + out$par <- out$par[!grepl("(phi_raw|theta_raw)", names(out$par))] + new_names <- names(out$par) + mark <- grepl("^beta\\[[[:digit:]]+\\]$", new_names) + if (QR && ncol(xtemp) > 1) { + out$par[mark] <- R_inv %*% out$par[mark] + out$theta_tilde[,mark] <- out$theta_tilde[, mark] %*% t(R_inv) + } + new_names[mark] <- colnames(xtemp) + new_names[new_names == "alpha[1]"] <- "(Intercept)" + names(out$par) <- new_names + out$stanfit <- suppressMessages(sampling(stanfit, data = standata, chains = 0)) + return(structure(out, prior.info = prior_info)) } else { - stop(paste("algorithm", algorithm, "is not supported.")) - } - check_stanfit(stanfit) - - if (QR) { - thetas <- extract(stanfit, pars = "beta", inc_warmup = TRUE, - permuted = FALSE) - betas <- apply(thetas, 1:2, FUN = function(theta) R_inv %*% theta) - end <- tail(dim(betas), 1L) - for (chain in 1:end) for (param in 1:nrow(betas)) { - stanfit@sim$samples[[chain]][[has_intercept + param]] <- - if (ncol(xtemp) > 1) betas[param, , chain] else betas[param, chain] - } + if (algorithm == "sampling") { + sampling_args <- set_sampling_args( + object = stanfit, + prior = prior, + user_dots = list(...), + user_adapt_delta = adapt_delta, + data = standata, + pars = pars, + show_messages = FALSE) + stanfit <- do.call(sampling, sampling_args) + } + else { # algorithm either "meanfield" or "fullrank" + stanfit <- rstan::vb(stanfit, pars = pars, data = standata, + algorithm = algorithm, init = 0.001, ...) + if (!QR) + recommend_QR_for_vb() + } + check_stanfit(stanfit) + + if (QR) { + thetas <- extract(stanfit, pars = "beta", inc_warmup = TRUE, + permuted = FALSE) + betas <- apply(thetas, 1:2, FUN = function(theta) R_inv %*% theta) + end <- tail(dim(betas), 1L) + for (chain in 1:end) for (param in 1:nrow(betas)) { + stanfit@sim$samples[[chain]][[has_intercept + param]] <- + if (ncol(xtemp) > 1) betas[param, , chain] else betas[param, chain] + } + } + new_names <- c(if (has_intercept) "(Intercept)", + colnames(xtemp), "rho", if(mod == 2) c("tau"), + if(family$family == "gaussian") "sigma", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") + stanfit@sim$fnames_oi <- new_names + return(structure(stanfit, prior.info = prior_info)) } - new_names <- c(if (has_intercept) "(Intercept)", - colnames(xtemp), "rho", if(mod == 2) c("tau"), - if(family$family == "gaussian") "sigma", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") - stanfit@sim$fnames_oi <- new_names - return(structure(stanfit, prior.info = prior_info)) } # Summarize spatial prior diff --git a/R/stanreg.R b/R/stanreg.R index 1889605b2..ffee71f01 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -45,6 +45,7 @@ stanreg <- function(object) { if (opt) { stanmat <- stanfit$theta_tilde probs <- c(0.025, .975) + browser() stan_summary <- cbind(Median = apply(stanmat, 2L, median), MAD_SD = apply(stanmat, 2L, mad), t(apply(stanmat, 2L, quantile, probs))) From 874689318774daa62ebe3a9abcfea138cac320ca Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 7 Aug 2017 23:23:35 -0400 Subject: [PATCH 15/59] adding tests for stan_bym --- tests/testthat/test_stan_besag.R | 4 - tests/testthat/test_stan_bym.R | 139 ++++++++++++++++++++++++++++++- 2 files changed, 138 insertions(+), 5 deletions(-) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 1401b0f49..6e28f7301 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -45,10 +45,6 @@ if (.Platform$OS.type != "windows" && require(betareg)) { spatial_data$trials <- rep(10, nrow(W)) spatial_data$y_binom <- rbinom(nrow(W), spatial_data$trials, binomial(link = "logit")$linkinv(1 + 0.4 * x + spatial_data$phi)) - fit_besag <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, W = W, iter = 1e3, chains = 4, - prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), - prior_sigma = normal(0,1)) - # test family/link combinations test_that("family = 'gaussian' works", { SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R index e1abf2384..4320b4cb3 100644 --- a/tests/testthat/test_stan_bym.R +++ b/tests/testthat/test_stan_bym.R @@ -16,4 +16,141 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # tests can be run using devtools::test() or manually by loading testthat -# package and then running the code below possibly with options(mc.cores = 4). \ No newline at end of file +# package and then running the code below possibly with options(mc.cores = 4). + +if (.Platform$OS.type != "windows" && require(betareg)) { + library(rstanarm) + SEED <- 12345 + set.seed(SEED) + ITER <- 50 + CHAINS <- 2 + + context("stan_bym") + + source(file.path("helpers", "expect_stanreg.R")) + source(file.path("helpers", "SW.R")) + + data("lattice10", package = "rstanarm") + + # Convert a spatial polygon to an N-by-N weight matrix + sp2weightmatrix <- function(spatialpolygon) { + spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) + } + W <- sp2weightmatrix(grid_sim) + x <- rnorm(nrow(W), 2, 1) + spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) + spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) + spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) + spatial_data$y_pois <- rpois(nrow(W), exp(-1 + 1.4 * x + spatial_data$phi)) + spatial_data$trials <- rep(10, nrow(W)) + spatial_data$y_binom <- rbinom(nrow(W), spatial_data$trials, binomial(link = "logit")$linkinv(1 + 0.4 * x + spatial_data$phi)) + + # test family/link combinations + test_that("family = 'gaussian' works", { + SW(fit_gauss_ident <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gauss_log <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gauss_inv <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_gauss_ident) + expect_stanreg(fit_gauss_log) + expect_stanreg(fit_gauss_inv) + }) + test_that("family = 'binomial' works", { + SW(fit_binom_logit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_probit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "probit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_cauchit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cauchit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_log <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_cloglog <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cloglog"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_binom_logit) + expect_stanreg(fit_binom_probit) + expect_stanreg(fit_binom_cauchit) + expect_stanreg(fit_binom_log) + expect_stanreg(fit_binom_cloglog) + + }) + test_that("family = 'poisson' works", { + SW(fit_pois_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_pois_log) + expect_stanreg(fit_pois_ident) + expect_stanreg(fit_pois_sqrt) + }) + + # test QR + test_that("QR errors when number of predictors is <= 1", { + expect_error( + stan_bym(y_gauss ~ x, data = spatial_data, family = gaussian(), seed = SEED, QR = TRUE), + "'QR' can only be specified when there are multiple predictors" + ) + }) + + test_that("QR works when number of x and/or z predictors is >= 1", { + SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + expect_stanreg(fit_bym) + }) + + test_that("stan_bym works with QR = TRUE and algorithm = 'optimizing'", { + + }) + + test_that("loo/waic for stan_bym works", { + SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, + family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + }) + + test_that("posterior_predict works for stan_bym", { + SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, + family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + preds_gauss <- posterior_predict(fit_gauss) + preds_binom <- posterior_predict(fit_binom) + preds_pois <- posterior_predict(fit_pois) + }) + + test_that("predict works for stan_bym", { + SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + pred_besag <- predict(fit_bym) + pred_new_besag <- predict(fit_bym, newdata = data.frame(x = rnorm(100, 2, 1))) + }) + + test_that("predict errors if nrow(newdata) < number of spatial regions", { + SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + pred_besag <- predict(fit_bym) + expect_error(pred_new_besag <- predict(fit_bym, newdata = data.frame(x = rnorm(10, 2, 1))), + "'newdata' is less than the number of spatial regions.") + }) + +} \ No newline at end of file From c329a6acb888a7636a115fa26e51933717ab7470 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 7 Aug 2017 23:40:15 -0400 Subject: [PATCH 16/59] use sparse matrix ops for 'scaling_factor' --- R/stan_spatial.fit.R | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 07856351b..fcc03ab0f 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -230,23 +230,31 @@ stan_spatial.fit <- function(x, y, w, standata$X <- array(standata$X, dim = c(standata$N, standata$K)) # create scaling_factor a la Dan Simpson - create_scaling_factor <- function(dat, W) { + create_scaling_factor <- function(dat) { + edges <- dat$edges + #Build the adjacency matrix + adj.matrix <- Matrix::sparseMatrix(i=edges[,1],j=edges[,2],x=1,symmetric=TRUE) #The ICAR precision matrix (note! This is singular) - Q <- diag(rowSums(W), dat$N) - W + Q <- Matrix::Diagonal(dat$N, Matrix::rowSums(adj.matrix)) - adj.matrix + #Add a small jitter to the diagonal for numerical stability (optional but recommended) - Q_pert <- Q + diag(dat$N) * max(diag(Q)) * sqrt(.Machine$double.eps) + Q_pert <- Q + Matrix::Diagonal(dat$N) * max(Matrix::diag(Q)) * sqrt(.Machine$double.eps) # Compute the diagonal elements of the covariance matrix subject to the # constraint that the entries of the ICAR sum to zero. - #See the function help for further details. + # See the function help for further details. Q_inv <- inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) - Q_inv <- as.matrix(Q_inv) - #Compute the geometric mean of the variances, which are on the diagonal of Q.inv - scaling_factor <- exp(mean(log(diag(Q_inv)))) + + # Compute the geometric mean of the variances, which are on the diagonal of Q.inv + scaling_factor <- exp(mean(log(Matrix::diag(Q_inv)))) return(scaling_factor) } - standata$scaling_factor <- create_scaling_factor(standata, W) + if (stan_function == "stan_bym") + standata$scaling_factor <- create_scaling_factor(standata) + else + standata$scaling_factor <- 0 + pars <- c(if (has_intercept) "alpha", "beta", "rho", if(mod == 2) c("tau"), if(family$family == "gaussian") "sigma", "mean_PPD", "psi") From 0ebd45cf2766d2331f4ef9261c1ae5ad492aaff0 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 7 Aug 2017 23:47:27 -0400 Subject: [PATCH 17/59] adding light documentation for stan_spatial.fit --- R/stan_spatial.fit.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index fcc03ab0f..03f5c2861 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -15,6 +15,12 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +#' Workhorse function for CAR spatial models. +#' +#' Both \code{stan_besag} and \code{stan_bym} call \code{stan_spatial.fit} to fit +#' the appropriate spatial model. See the documentation for either model for further +#' details on the arguments of \code{stan_spatial.fit}. +#' #' @export #' From 9859ddb7012cbf53cccf051421d2c8f484ff5cdb Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 8 Aug 2017 14:22:32 -0400 Subject: [PATCH 18/59] omit optimizing from supported algorithms in CAR models --- R/stan_besag.R | 19 ++++++++++++------ R/stan_bym.R | 47 ++++++++++++++++++++++++++++++-------------- R/stan_spatial.fit.R | 4 +++- exec/spatial.stan | 2 ++ 4 files changed, 50 insertions(+), 22 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 413f80d9b..424fcbfdd 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -15,10 +15,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -#' Bayesian CAR Intrinsic Autoregressive models via Stan +#' Bayesian intrinsic conditional autoregressive (ICAR) models via Stan #' #' Spatial regression modeling with an intrinsic conditional autoregressive (ICAR) prior. - +#' #' @rdname stan_besag #' @export #' @@ -45,11 +45,19 @@ #' @param prior_rho The prior distribution on the variance of the non-centered structured (spatial) effect. #' @param prior_sigma The prior distribution on the standard deviation of the outcome if \code{family = gaussian()} is declared. #' -#' @details The \code{stan_besag} model is similar to the analogous model in R-INLA. However, instead of using the integrated Laplace approximation (INLA) method, full Bayesian estimation is performed (if \code{algorithm} is \code{"sampling"}) via MCMC. The model includes priors on the intercept, regression coefficients, and the relevant scale parameters. The \code{stan_besag} function calls the workhorse \code{stan_spatial.fit} function, but it is also possible to call the latter directly. +#' @details The \code{stan_besag} model is similar to the analogous model in +#' R-INLA. However, instead of using the integrated Laplace approximation +#' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} +#' is \code{"sampling"}) via MCMC. The model includes priors on the intercept, +#' regression coefficients, and the relevant scale parameters. The +#' \code{stan_besag} function calls the workhorse \code{stan_spatial.fit} +#' function, but it is also possible to call the latter directly. #' #' @seealso The vignette for \code{stan_besag}. #' -#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. arXiv preprint arXiv:1601.01180. +#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An +#' intuitive Bayesian spatial model for disease mapping that accounts for +#' scaling. arXiv preprint arXiv:1601.01180. #' #' @examples #' ### Simulated Data on a Lattice @@ -79,7 +87,6 @@ #' fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) #' pp_check(fit_besag) #' - stan_besag <- function(formula, family = gaussian(), data, @@ -89,7 +96,7 @@ stan_besag <- function(formula, prior = normal(), prior_intercept = normal(), prior_sigma = NULL, prior_rho = normal(), prior_PD = FALSE, - algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), + algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { stan_function <- "stan_besag" diff --git a/R/stan_bym.R b/R/stan_bym.R index 804190e00..75a79ce57 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -15,10 +15,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -#' Bayesian CAR BYM models via Stan +#' Bayesian conditional autoregressive (CAR) BYM models via Stan #' #' Spatial regression modeling with the Besag, York, Mollie conditional autoregressive (CAR) prior. -#' @rdname stan_bym +#' #' @export #' #' @template return-stanreg-object @@ -36,20 +36,39 @@ #' @template args-adapt_delta #' @template args-QR #' -#' @param family Distribution associated with the outcome. Gaussian, Binomial, and Poisson families are supported. -#' @param trials If \code{family = binomial()} then a vector of trials (equal in length to the outcome) must be declared. +#' @param family Distribution associated with the outcome. Gaussian, Binomial, +#' and Poisson families are supported. +#' @param trials If \code{family = binomial()} then a vector of trials (equal in +#' length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_rho The prior on the proportion of the marginal variance that is explained by the structured (spatial) effect. The hyperparameter \code{rho} is in the unit interval so users have the option of declaring a Beta prior distribution or a flat prior. A prior distribution with more mass around 1 is analogous to the prior belief that there exists a strong spatial relationship on the graph. -#' @param prior_tau The prior on the marginal variance contribution of the structured (spatial) and unstructured (random) effect. -#' @param prior_sigma The prior distribution on the standard deviation of the outcome if \code{family = gaussian()} is declared. -#' -#' @details The \code{stan_bym} model is similar to the analogous model in R-INLA. However, instead of using the integrated Laplace approximation (INLA) method, full Bayesian estimation is performed (if \code{algorithm} is \code{"sampling"}) via MCMC. The model includes priors on the intercept, regression coefficients, and the relevant scale/mixing parameters. The \code{stan_bym} function calls the workhorse \code{stan_spatial.fit} function, but it is also possible to call the latter directly. +#' @param prior_rho The prior on the proportion of the marginal variance that is +#' explained by the structured (spatial) effect. The hyperparameter \code{rho} +#' is in the unit interval so users have the option of declaring a Beta prior +#' distribution or a flat prior. A prior distribution with more mass around 1 +#' is analogous to the prior belief that there exists a strong spatial +#' relationship on the graph. +#' @param prior_tau The prior on the marginal variance contribution of the +#' structured (spatial) and unstructured (random) effect. +#' @param prior_sigma The prior distribution on the standard deviation of the +#' outcome if \code{family = gaussian()} is declared. +#' +#' @details The \code{stan_bym} model is similar to the analogous model in +#' R-INLA. However, instead of using the integrated Laplace approximation +#' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} +#' is \code{"sampling"}) via MCMC. The model includes priors on the intercept, +#' regression coefficients, and the relevant scale/mixing parameters. The +#' \code{stan_bym} function calls the workhorse \code{stan_spatial.fit} +#' function, but it is also possible to call the latter directly. #' #' @seealso The vignette for \code{stan_bym}. #' -#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. arXiv preprint arXiv:1601.01180. -#' -#' Simpson, D., Rue, H., Martins, T.G., Riebler, A. and Sorbye, S.H. (2015). Penalising model component complexity: A principled, practical approach to constructing priors. arXiv preprint arXiv:1403.4630. +#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An +#' intuitive Bayesian spatial model for disease mapping that accounts for +#' scaling. arXiv preprint arXiv:1601.01180. +#' +#' Simpson, D., Rue, H., Martins, T.G., Riebler, A. and Sorbye, S.H. (2015). +#' Penalising model component complexity: A principled, practical approach to +#' constructing priors. arXiv preprint arXiv:1403.4630. #' #' @examples #' ### Simulated Data on a Lattice @@ -78,8 +97,6 @@ #' # fit the model #' fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) #' pp_check(fit_besag) - - stan_bym <- function(formula, family = gaussian(), data, @@ -89,7 +106,7 @@ stan_bym <- function(formula, prior = normal(), prior_intercept = normal(), prior_sigma = NULL, prior_rho = beta(0.5,0.5), prior_tau = normal(), prior_PD = FALSE, - algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), + algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { stan_function <- "stan_bym" diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 03f5c2861..4fa48cf79 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -32,7 +32,7 @@ stan_spatial.fit <- function(x, y, w, prior = normal(), prior_intercept = normal(), prior_sigma = NULL, prior_rho = NULL, prior_tau = NULL, prior_PD = FALSE, - algorithm = c("sampling", "optimizing", "meanfield", "fullrank"), + algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { # check that W is appropriate @@ -283,12 +283,14 @@ stan_spatial.fit <- function(x, y, w, stanfit <- stanmodels$spatial + # n.b. optimizing is not supported if (algorithm == "optimizing") { out <- optimizing(stanfit, data = standata, draws = 1000, constrained = TRUE, + hessian = TRUE, ...) check_stanfit(out) out$par <- out$par[!grepl("(phi_raw|theta_raw)", names(out$par))] diff --git a/exec/spatial.stan b/exec/spatial.stan index f708590c1..e645ea239 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -3,6 +3,8 @@ functions { #include "continuous_likelihoods.stan" #include "binomial_likelihoods.stan" #include "count_likelihoods.stan" + // add negative_binomial likelihood + // add gamma likelihood } data { int N; // number of regions From 7c36fefece1357e2a1d4ddc1bc67bf5cfa728f99 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Wed, 9 Aug 2017 00:04:53 -0400 Subject: [PATCH 19/59] use chunks stan code; use prior_aux --- R/stan_besag.R | 5 +- R/stan_bym.R | 6 +- R/stan_spatial.fit.R | 128 ++++++++++++++++++++++++--------------- exec/spatial.stan | 138 +++++++++++++++++++++++++++++++++++-------- 4 files changed, 198 insertions(+), 79 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 424fcbfdd..5d36a9b9f 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -43,7 +43,6 @@ #' in length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. #' @param prior_rho The prior distribution on the variance of the non-centered structured (spatial) effect. -#' @param prior_sigma The prior distribution on the standard deviation of the outcome if \code{family = gaussian()} is declared. #' #' @details The \code{stan_besag} model is similar to the analogous model in #' R-INLA. However, instead of using the integrated Laplace approximation @@ -94,7 +93,7 @@ stan_besag <- function(formula, W, ..., prior = normal(), prior_intercept = normal(), - prior_sigma = NULL, prior_rho = normal(), + prior_aux = NULL, prior_rho = normal(), prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -117,7 +116,7 @@ stan_besag <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, - prior_sigma = prior_sigma, + prior_aux = prior_aux, prior_rho = prior_rho, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, diff --git a/R/stan_bym.R b/R/stan_bym.R index 75a79ce57..546ca03a2 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -49,8 +49,6 @@ #' relationship on the graph. #' @param prior_tau The prior on the marginal variance contribution of the #' structured (spatial) and unstructured (random) effect. -#' @param prior_sigma The prior distribution on the standard deviation of the -#' outcome if \code{family = gaussian()} is declared. #' #' @details The \code{stan_bym} model is similar to the analogous model in #' R-INLA. However, instead of using the integrated Laplace approximation @@ -104,7 +102,7 @@ stan_bym <- function(formula, W, ..., prior = normal(), prior_intercept = normal(), - prior_sigma = NULL, prior_rho = beta(0.5,0.5), prior_tau = normal(), + prior_aux = NULL, prior_rho = beta(0.5,0.5), prior_tau = normal(), prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -132,7 +130,7 @@ stan_bym <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, - prior_sigma = prior_sigma, prior_rho = prior_rho, prior_tau = prior_tau, + prior_aux = prior_aux, prior_rho = prior_rho, prior_tau = prior_tau, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 4fa48cf79..d9b127051 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -30,7 +30,7 @@ stan_spatial.fit <- function(x, y, w, stan_function = c("stan_besag", "stan_bym"), ..., prior = normal(), prior_intercept = normal(), - prior_sigma = NULL, prior_rho = NULL, prior_tau = NULL, + prior_aux = NULL, prior_rho = NULL, prior_tau = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -52,7 +52,7 @@ stan_spatial.fit <- function(x, y, w, if (is.null(trials)) trials <- rep(0,length(y)) - # Replace all this stuff with family = binomial(link = "logit") calls etc. + if (family$family == "gaussian") { y_real <- y y_int <- rep(0, length(y)) @@ -73,7 +73,7 @@ stan_spatial.fit <- function(x, y, w, family_num <- 2 } if(!is.integer(y_int)) - stop("Outcome must an integer for count likelihoods.") + stop("Outcome must be an integer for count likelihoods.") } if (stan_function == "stan_besag") @@ -87,7 +87,8 @@ stan_spatial.fit <- function(x, y, w, assign(i, x_stuff[[i]]) nvars <- ncol(xtemp) - ok_dists <- nlist("normal", student_t = "t", "cauchy") + ok_dists <- nlist("normal", student_t = "t", "cauchy", "hs", "hs_plus", + "laplace", "lasso", "product_normal") ok_intercept_dists <- ok_dists ok_scale_dists <- nlist("normal", student_t = "t", "cauchy", "exponential") @@ -155,22 +156,21 @@ stan_spatial.fit <- function(x, y, w, prior_df_for_tau <- 1 } - # Deal with prior_sigma... needs more dist options - if (family$family == "gaussian") { - has_sigma <- 1 - prior_sigma_stuff <- handle_glm_prior(prior_sigma, nvars = 1, family$link, default_scale = 1, + if (family$family %in% c("gaussian","Gamma","neg_binomial_2")) { + has_aux <- 1 + prior_aux_stuff <- handle_glm_prior(prior_aux, nvars = 1, family$link, default_scale = 1, ok_dists = ok_dists) - names(prior_sigma_stuff) <- paste0(names(prior_sigma_stuff), - "_for_sigma") - for (i in names(prior_sigma_stuff)) # prior_{dist, mean, scale, df, autoscale} - assign(i, prior_sigma_stuff[[i]]) + names(prior_aux_stuff) <- paste0(names(prior_aux_stuff), + "_for_aux") + for (i in names(prior_aux_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_aux_stuff[[i]]) } else { - has_sigma <- 0 - prior_dist_for_sigma <- 0 - prior_mean_for_sigma <- 0 - prior_scale_for_sigma <- 1 - prior_df_for_sigma <- 1 + has_aux <- 0 + prior_dist_for_aux <- 0 + prior_mean_for_aux <- 0 + prior_scale_for_aux <- 1 + prior_df_for_aux <- 1 } # QR decomposition for x @@ -215,7 +215,7 @@ stan_spatial.fit <- function(x, y, w, prior_dist = prior_dist, prior_dist_rho = prior_dist_for_rho, prior_dist_tau = prior_dist_for_tau, - prior_dist_sigma = prior_dist_for_sigma, + prior_dist_for_aux = prior_dist_for_aux, prior_mean_for_intercept = c(prior_mean_for_intercept), prior_scale_for_intercept = c(prior_scale_for_intercept), prior_df_for_intercept = c(prior_df_for_intercept), @@ -228,12 +228,18 @@ stan_spatial.fit <- function(x, y, w, prior_mean_rho = c(prior_mean_for_rho), prior_scale_rho = c(prior_scale_for_rho), prior_df_rho = c(prior_df_for_rho), - prior_mean_sigma = c(prior_mean_for_sigma), - prior_scale_sigma = c(prior_scale_for_sigma), - prior_df_sigma = c(prior_df_for_sigma), + prior_mean_for_aux = c(prior_mean_for_aux), + prior_scale_for_aux = c(prior_scale_for_aux), + prior_df_for_aux = c(prior_df_for_aux), has_intercept = has_intercept, - mod = mod) - standata$X <- array(standata$X, dim = c(standata$N, standata$K)) + mod = mod, + global_prior_df, + global_prior_df_for_intercept, + global_prior_scale, + global_prior_scale_for_intercept, + num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0)) + + standata$X <- array(standata$X, dim = c(standata$N, standata$K)) # FIX ME!!! # create scaling_factor a la Dan Simpson create_scaling_factor <- function(dat) { @@ -261,25 +267,26 @@ stan_spatial.fit <- function(x, y, w, else standata$scaling_factor <- 0 - pars <- c(if (has_intercept) "alpha", "beta", "rho", if(mod == 2) c("tau"), if(family$family == "gaussian") "sigma", + pars <- c(if (has_intercept) "alpha", "beta", "rho", if(mod == 2) c("tau"), if(family$family == "gaussian") "aux", "mean_PPD", "psi") - +browser() prior_info <- summarize_spatial_prior( user_prior = prior_stuff, user_prior_intercept = prior_intercept_stuff, user_prior_rho = prior_rho_stuff, - user_prior_sigma = prior_sigma_stuff, + user_prior_aux = if (has_aux == 1) {prior_aux_stuff} else {NULL}, user_prior_tau = prior_tau_stuff, has_intercept = has_intercept, has_predictors = nvars > 0, - has_sigma = has_sigma, + has_aux = has_aux, has_rho = 1, has_tau = has_tau, adjusted_prior_scale = prior_scale, adjusted_prior_intercept_scale = prior_scale_for_intercept, adjusted_prior_scale_rho = prior_scale_for_rho, - adjusted_prior_scale_sigma = prior_scale_for_sigma, - adjusted_prior_scale_tau = prior_scale_for_tau) + adjusted_prior_aux_scale = prior_scale_for_aux, + adjusted_prior_scale_tau = prior_scale_for_tau, + family = family) stanfit <- stanmodels$spatial @@ -338,7 +345,8 @@ stan_spatial.fit <- function(x, y, w, } new_names <- c(if (has_intercept) "(Intercept)", colnames(xtemp), "rho", if(mod == 2) c("tau"), - if(family$family == "gaussian") "sigma", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") + if(family$family == "gaussian") "aux", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") + stanfit@sim$fnames_oi <- new_names return(structure(stanfit, prior.info = prior_info)) } @@ -348,19 +356,20 @@ stan_spatial.fit <- function(x, y, w, summarize_spatial_prior <- function(user_prior, user_prior_intercept, - user_prior_sigma, + user_prior_aux, user_prior_rho, user_prior_tau, has_intercept, has_predictors, - has_sigma, + has_aux, has_rho, has_tau, adjusted_prior_scale, adjusted_prior_intercept_scale, - adjusted_prior_scale_sigma, adjusted_prior_scale_rho, - adjusted_prior_scale_tau) { + adjusted_prior_scale_tau, + adjusted_prior_aux_scale, + family) { rescaled_coef <- user_prior$prior_autoscale && has_predictors && !is.na(user_prior$prior_dist_name) && @@ -369,6 +378,11 @@ summarize_spatial_prior <- function(user_prior, user_prior_intercept$prior_autoscale_for_intercept && has_intercept && !is.na(user_prior_intercept$prior_dist_name_for_intercept) && (user_prior_intercept$prior_scale != adjusted_prior_intercept_scale) + if (has_aux) { + rescaled_aux <- user_prior_aux$prior_autoscale_for_aux && + !is.na(user_prior_aux$prior_dist_name_for_aux) && + (user_prior_aux$prior_scale_for_aux != adjusted_prior_aux_scale) + } if (has_predictors && user_prior$prior_dist_name %in% "t") { if (all(user_prior$prior_df == 1)) { @@ -385,12 +399,12 @@ summarize_spatial_prior <- function(user_prior, user_prior_intercept$prior_dist_name_for_intercept <- "student_t" } } - if (has_sigma && - user_prior_sigma$prior_dist_name_for_sigma %in% "t") { - if (all(user_prior_sigma$prior_df_for_sigma == 1)) { - user_prior_sigma$prior_dist_name_for_sigma <- "cauchy" + if (has_aux && + user_prior_aux$prior_dist_name_for_aux %in% "t") { + if (all(user_prior_aux$prior_df_for_aux == 1)) { + user_prior_aux$prior_dist_name_for_aux <- "cauchy" } else { - user_prior_sigma$prior_dist_name_for_sigma <- "student_t" + user_prior_aux$prior_dist_name_for_aux <- "student_t" } } @@ -434,15 +448,15 @@ summarize_spatial_prior <- function(user_prior, df = if (prior_dist_name_for_intercept %in% "student_t") prior_df_for_intercept else NULL )), - prior_sigma = - if (!has_sigma) NULL else with(user_prior_sigma, list( - dist = prior_dist_name_for_sigma, - location = prior_mean_for_sigma, - scale = prior_scale_for_sigma, + prior_aux = + if (!has_aux) NULL else with(user_prior_aux, list( + dist = prior_dist_name_for_aux, + location = prior_mean_for_aux, + scale = prior_scale_for_aux, adjusted_scale = if (rescaled_int) - adjusted_prior_sigma_scale else NULL, - df = if (prior_dist_name_for_sigma %in% "student_t") - prior_df_for_sigma else NULL + adjusted_prior_aux_scale else NULL, + df = if (prior_dist_name_for_aux %in% "student_t") + prior_df_for_aux else NULL )), prior_rho = if (!has_rho) NULL else with(user_prior_rho, list( @@ -467,5 +481,25 @@ summarize_spatial_prior <- function(user_prior, prior_df_for_tau else NULL )) ) + aux_name <- .rename_aux(family) + prior_list$prior_aux <- if (is.na(aux_name)) + NULL else with(user_prior_aux, list( + dist = prior_dist_name_for_aux, + location = if (!is.na(prior_dist_name_for_aux) && + prior_dist_name_for_aux != "exponential") + prior_mean_for_aux else NULL, + scale = if (!is.na(prior_dist_name_for_aux) && + prior_dist_name_for_aux != "exponential") + prior_scale_for_aux else NULL, + adjusted_scale = if (rescaled_aux) + adjusted_prior_aux_scale else NULL, + df = if (!is.na(prior_dist_name_for_aux) && + prior_dist_name_for_aux %in% "student_t") + prior_df_for_aux else NULL, + rate = if (!is.na(prior_dist_name_for_aux) && + prior_dist_name_for_aux %in% "exponential") + 1 / prior_scale_for_aux else NULL, + aux_name = aux_name + )) return(prior_list) } diff --git a/exec/spatial.stan b/exec/spatial.stan index e645ea239..acfbf93a1 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -5,6 +5,7 @@ functions { #include "count_likelihoods.stan" // add negative_binomial likelihood // add gamma likelihood + #include "common_functions.stan" } data { int N; // number of regions @@ -27,36 +28,56 @@ data { int prior_dist; int prior_dist_tau; int prior_dist_rho; - int prior_dist_sigma; real prior_mean_for_intercept; real prior_scale_for_intercept; real prior_df_for_intercept; vector[K] prior_mean; vector[K] prior_scale; - real prior_df[K]; + vector[K] prior_df; real prior_mean_tau; real prior_scale_tau; real prior_df_tau; real prior_mean_rho; real prior_scale_rho; real prior_df_rho; - real prior_mean_sigma; - real prior_scale_sigma; - real prior_df_sigma; + real global_prior_df; // for hs priors only + real global_prior_scale; // for hs priors only + int num_normals[prior_dist == 7 ? K : 0]; + int prior_dist_for_aux; + real prior_mean_for_aux; + real prior_scale_for_aux; + real prior_df_for_aux; } transformed data { real poisson_max = 30 * log(2); + int hs; + int is_continuous; + if (prior_dist <= 2) hs = 0; + else if (prior_dist == 3) hs = 2; + else if (prior_dist == 4) hs = 4; + else hs = 0; + if (family == 1) is_continuous = 1; + else is_continuous = 0; } parameters { real gamma[has_intercept]; // raw intercept - vector[K] beta; // predictors on covariates (including intercept) + vector[K] z_beta; vector[N] theta_raw[mod == 2? 1 : 0]; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) real rho; // variance i.e. rho^2 real tau[mod == 2? 1 : 0]; // variance i.e. tau^2 - real sigma[family == 1? 1 : 0]; // applies only if family is gaussian + real global[hs]; + vector[K] local[hs]; + vector[K] mix[prior_dist == 5 || prior_dist == 6]; + real aux_unscaled; # interpretation depends on family! + real one_over_lambda[prior_dist == 6]; } transformed parameters { + vector[K] beta; // predictors on covariates (including intercept) + // aux has to be defined first in the hs case + real aux = prior_dist_for_aux == 0 ? aux_unscaled : (prior_dist_for_aux <= 2 ? + prior_scale_for_aux * aux_unscaled + prior_mean_for_aux : + prior_scale_for_aux * aux_unscaled); vector[N] phi; // non-centered random effect (spatial) vector[N] psi; phi[1:(N - 1)] = phi_raw; @@ -65,7 +86,38 @@ transformed parameters { psi = phi * sqrt(inv(rho)); else if (mod == 2) psi = tau[1]*(sqrt(1-rho)*theta_raw[1] + sqrt(rho/scaling_factor)*phi); - // psi = tau[1]*(sqrt(rho)*theta_raw[1] + sqrt(1-rho)*scaling_factor*phi); + // for regression coefficients + if (prior_dist == 0) beta = z_beta; + else if (prior_dist == 1) beta = z_beta .* prior_scale + prior_mean; + else if (prior_dist == 2) for (k in 1:K) { + beta[k] = CFt(z_beta[k], prior_df[k]) * prior_scale[k] + prior_mean[k]; + } + else if (prior_dist == 3) { + if (is_continuous == 1 && family == 1) + beta = hs_prior(z_beta, global, local, global_prior_scale, aux); + else beta = hs_prior(z_beta, global, local, global_prior_scale, 1); + } + else if (prior_dist == 4) { + if (is_continuous == 1 && family == 1) + beta = hsplus_prior(z_beta, global, local, global_prior_scale, aux); + else beta = hsplus_prior(z_beta, global, local, global_prior_scale, 1); + } + else if (prior_dist == 5) // laplace + beta = prior_mean + prior_scale .* sqrt(2 * mix[1]) .* z_beta; + else if (prior_dist == 6) // lasso + beta = prior_mean + one_over_lambda[1] * prior_scale .* sqrt(2 * mix[1]) .* z_beta; + else if (prior_dist == 7) { // product_normal + int z_pos = 1; + for (k in 1:K) { + beta[k] = z_beta[z_pos]; + z_pos = z_pos + 1; + for (n in 2:num_normals[k]) { + beta[k] = beta[k] * z_beta[z_pos]; + z_pos = z_pos + 1; + } + beta[k] = beta[k] * prior_scale[k] ^ num_normals[k] + prior_mean[k]; + } + } } model { vector[N] eta; // linear predictor + spatial random effects @@ -77,7 +129,7 @@ model { // likelihoods if (family == 1) { eta = linkinv_gauss(eta, link); - target+= normal_lpdf(y_real | eta, sigma[1]); + target+= normal_lpdf(y_real | eta, aux); } else if (family == 2) { eta = linkinv_count(eta, link); @@ -89,19 +141,52 @@ model { } // prior on spatial parameter vector target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); + // non-centered parameterization on beta + target+= normal_lpdf(z_beta | 0, 1); // priors on coefficients if (has_intercept == 1) { - if (prior_dist_for_intercept == 1) - target+= normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); - else if (prior_dist_for_intercept == 2) - target+= student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, prior_scale_for_intercept); - /* else prior_dist_intercept is 0 and nothing is added */ + if (prior_dist_for_intercept == 1) // normal + target += normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); + else if (prior_dist_for_intercept == 2) // student_t + target += student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, + prior_scale_for_intercept); + /* else prior_dist is 0 and nothing is added */ } if (K > 0) { - if (prior_dist == 1) - target+= normal_lpdf(beta | prior_mean, prior_scale); - else if (prior_dist == 2) - target+= student_t_lpdf(beta | prior_df, prior_mean, prior_scale); + // Log-priors for coefficients + if (prior_dist == 1) target += normal_lpdf(z_beta | 0, 1); + else if (prior_dist == 2) target += normal_lpdf(z_beta | 0, 1); // Student t + else if (prior_dist == 3) { // hs + real log_half = -0.693147180559945286; + target += normal_lpdf(z_beta | 0, 1); + target += normal_lpdf(local[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); + target += normal_lpdf(global[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); + } + else if (prior_dist == 4) { // hs+ + real log_half = -0.693147180559945286; + target += normal_lpdf(z_beta | 0, 1); + target += normal_lpdf(local[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); + target += normal_lpdf(local[3] | 0, 1) - log_half; + // unorthodox useage of prior_scale as another df hyperparameter + target += inv_gamma_lpdf(local[4] | 0.5 * prior_scale, 0.5 * prior_scale); + target += normal_lpdf(global[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); + } + else if (prior_dist == 5) { // laplace + target += normal_lpdf(z_beta | 0, 1); + target += exponential_lpdf(mix[1] | 1); + } + else if (prior_dist == 6) { // lasso + target += normal_lpdf(z_beta | 0, 1); + target += exponential_lpdf(mix[1] | 1); + target += chi_square_lpdf(one_over_lambda[1] | prior_df[1]); + } + else if (prior_dist == 7) { // product_normal + target += normal_lpdf(z_beta | 0, 1); + } /* else prior_dist is 0 and nothing is added */ } if (mod == 2) { // BYM @@ -122,12 +207,15 @@ model { target+= student_t_lpdf(rho | prior_df_rho, prior_mean_rho, prior_scale_rho); /* else prior_dist_rho is 0 and nothing is added */ } - if (family == 1) { // prior on sd if outcome is gaussian - if (prior_dist_sigma == 1) - target+= normal_lpdf(sigma[1] | prior_mean_sigma, prior_scale_sigma); - else if (prior_dist_sigma == 2) - target+= student_t_lpdf(sigma[1] | prior_df_sigma, prior_mean_sigma, prior_scale_sigma); - /* else prior_dist_sigma is 0 and nothing is added */ + // priors on aux + if (prior_dist_for_aux > 0 && prior_scale_for_aux > 0) { + real log_half = -0.693147180559945286; + if (prior_dist_for_aux == 1) + target += normal_lpdf(aux_unscaled | 0, 1) - log_half; + else if (prior_dist_for_aux == 2) + target += student_t_lpdf(aux_unscaled | prior_df_for_aux, 0, 1) - log_half; + else + target += exponential_lpdf(aux_unscaled | 1); } } generated quantities { @@ -145,7 +233,7 @@ generated quantities { } if (family == 1) { eta = linkinv_gauss(eta, link); - for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], sigma[1]); + for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], aux); } else if (family == 2) { eta = linkinv_count(eta, link); From fbdeeebcc8056cd1a1baaa2056e7de4822379391 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Wed, 9 Aug 2017 15:25:29 -0400 Subject: [PATCH 20/59] adding more likelihoods to CAR models --- R/stan_spatial.fit.R | 19 ++++++++++--------- exec/spatial.stan | 29 ++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index d9b127051..57b8c16b6 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -40,7 +40,7 @@ stan_spatial.fit <- function(x, y, w, algorithm <- match.arg(algorithm) family <- validate_family(family) - supported_families <- c("binomial", "gaussian", "poisson") + supported_families <- c("binomial", "gaussian", "poisson", "Gamma", "neg_binomial_2") fam <- which(pmatch(supported_families, family$family, nomatch = 0L) == 1L) if (!length(fam)) stop("'family' must be one of ", paste(supported_families, collapse = ", ")) @@ -50,27 +50,28 @@ stan_spatial.fit <- function(x, y, w, if (!length(link)) stop("'link' must be one of ", paste(supported_links, collapse = ", ")) - if (is.null(trials)) - trials <- rep(0,length(y)) + family_num <- switch(family$family, + gaussian = 1, + poisson = 2, + neg_binomial_2 = 3, + binomial = 4, + Gamma = 5) - if (family$family == "gaussian") { + if (family$family %in% c("gaussian", "Gamma")) { y_real <- y y_int <- rep(0, length(y)) trials <- rep(0, length(y)) - family_num <- 1 } else { y_real <- rep(0, length(y)) y_int <- y if (family$family == "binomial") { - family_num <- 3 if (is.null(trials) | any(y > trials)) stop("Outcome values must be less than or equal to the corresponding value in `trials`.") } - else { # poisson + else { # poisson trials <- rep(0, length(y)) - family_num <- 2 } if(!is.integer(y_int)) stop("Outcome must be an integer for count likelihoods.") @@ -269,7 +270,7 @@ stan_spatial.fit <- function(x, y, w, pars <- c(if (has_intercept) "alpha", "beta", "rho", if(mod == 2) c("tau"), if(family$family == "gaussian") "aux", "mean_PPD", "psi") -browser() + prior_info <- summarize_spatial_prior( user_prior = prior_stuff, user_prior_intercept = prior_intercept_stuff, diff --git a/exec/spatial.stan b/exec/spatial.stan index acfbf93a1..31155d08e 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -14,8 +14,8 @@ data { vector[K] xbar; int trials[N]; // binomial trials (0 1d array if not applicable) int y_int[N]; // outcome - real y_real[N]; // outcome - int family; // family (1 = Gaussian, 2 = Poisson, 3 = Binomial) + vector[N] y_real; // outcome + int family; // family (1 = Gaussian, 2 = Poisson, 3 = Binomial) int link; int E_n; // number of adjacency pairs int edges[E_n, 2]; // adjacency pairs @@ -52,6 +52,7 @@ transformed data { real poisson_max = 30 * log(2); int hs; int is_continuous; + real sum_log_y = family == 1 ? not_a_number() : sum(log(y_real)); if (prior_dist <= 2) hs = 0; else if (prior_dist == 3) hs = 2; else if (prior_dist == 4) hs = 4; @@ -62,7 +63,7 @@ transformed data { parameters { real gamma[has_intercept]; // raw intercept vector[K] z_beta; - vector[N] theta_raw[mod == 2? 1 : 0]; // used for random effect (non-spatial) + vector[mod == 2? N : 0] theta_raw; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) real rho; // variance i.e. rho^2 real tau[mod == 2? 1 : 0]; // variance i.e. tau^2 @@ -136,9 +137,16 @@ model { target+= poisson_log_lpmf(y_int | eta); } else if (family == 3) { + eta = linkinv_count(eta, link); + target += neg_binomial_2_lpmf(y_int | eta, aux); + } + else if (family == 4) { eta = linkinv_binom(eta, link); target+= binomial_lpmf(y_int | trials, inv_logit(eta)); } + else if (family == 5) { + target += GammaReg(y_real, eta, aux, link, sum_log_y); + } // prior on spatial parameter vector target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); // non-centered parameterization on beta @@ -245,9 +253,24 @@ generated quantities { } } else if (family == 3) { + eta = linkinv_count(eta, link); + for (n in 1:N) { + real gamma_temp; + if (is_inf(aux)) gamma_temp = eta[n]; + else gamma_temp = gamma_rng(aux, aux / eta[n]); + if (gamma_temp < poisson_max) + mean_PPD = mean_PPD + poisson_rng(gamma_temp); + else mean_PPD = mean_PPD + normal_rng(gamma_temp, sqrt(gamma_temp)); + } + } + else if (family == 4) { eta = linkinv_binom(eta, link); for (n in 1:N) mean_PPD = mean_PPD + binomial_rng(trials[n], inv_logit(eta[n])); } + else if (family == 5) { + if (link > 1) eta = linkinv_gamma(eta, link); + for (n in 1:N) mean_PPD = mean_PPD + gamma_rng(aux, aux / eta[n]); + } } mean_PPD = mean_PPD / N; } From 11c132e2abb6dd79da1721bc6786d1424a057217 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Thu, 10 Aug 2017 01:29:30 -0400 Subject: [PATCH 21/59] refactor stan chunks for spatial.stan --- exec/continuous.stan | 61 +++++++++----------- exec/spatial.stan | 99 +++----------------------------- inst/chunks/priors.stan | 45 +++++++++++++++ inst/chunks/priors_aux.stan | 10 ++++ inst/chunks/priors_glm.stan | 50 +--------------- inst/chunks/tparameters.stan | 31 ++++++++++ inst/chunks/tparameters_glm.stan | 33 +---------- 7 files changed, 126 insertions(+), 203 deletions(-) create mode 100644 inst/chunks/priors.stan create mode 100644 inst/chunks/priors_aux.stan create mode 100644 inst/chunks/tparameters.stan diff --git a/exec/continuous.stan b/exec/continuous.stan index c2ec00c21..c4099ab02 100644 --- a/exec/continuous.stan +++ b/exec/continuous.stan @@ -6,7 +6,7 @@ functions { #include "common_functions.stan" #include "continuous_likelihoods.stan" #include "SSfunctions.stan" - + /* * Calculate lower bound on intercept * @@ -34,8 +34,8 @@ functions { if (family == 4 && link == 5) return 0; return positive_infinity(); } - - /** + + /** * test function for csr_matrix_times_vector * * @param m Integer number of rows @@ -46,11 +46,11 @@ functions { * @param b Vector that is multiplied from the left by the CSR matrix * @return A vector that is the product of the CSR matrix and b */ - vector test_csr_matrix_times_vector(int m, int n, vector w, + vector test_csr_matrix_times_vector(int m, int n, vector w, int[] v, int[] u, vector b) { - return csr_matrix_times_vector(m, n, w, v, u, b); + return csr_matrix_times_vector(m, n, w, v, u, b); } - + } data { #include "NKX.stan" // declares N, K, X, xbar, dense_X, nnz_x, w_x, v_x, u_x @@ -63,7 +63,7 @@ data { // declares prior_{mean, scale, df}, prior_{mean, scale, df}_for_intercept, prior_{mean, scale, df}_for_aux #include "hyperparameters.stan" // declares t, p[t], l[t], q, len_theta_L, shape, scale, {len_}concentration, {len_}regularization - #include "glmer_stuff.stan" + #include "glmer_stuff.stan" #include "glmer_stuff2.stan" // declares num_not_zero, w, v, u #include "data_betareg.stan" int SSfun; // nonlinear function indicator, 0 for identity @@ -93,10 +93,10 @@ parameters { } transformed parameters { // aux has to be defined first in the hs case - real aux = prior_dist_for_aux == 0 ? aux_unscaled : (prior_dist_for_aux <= 2 ? + real aux = prior_dist_for_aux == 0 ? aux_unscaled : (prior_dist_for_aux <= 2 ? prior_scale_for_aux * aux_unscaled + prior_mean_for_aux : prior_scale_for_aux * aux_unscaled); - vector[z_dim] omega; // used in tparameters_betareg.stan + vector[z_dim] omega; // used in tparameters_betareg.stan #include "tparameters_glm.stan" // defines beta, b, theta_L #include "tparameters_betareg.stan" @@ -112,7 +112,7 @@ transformed parameters { } } else { - theta_L = make_theta_L(len_theta_L, p, + theta_L = make_theta_L(len_theta_L, p, aux, tau, scale, zeta, rho, z_T); b = make_b(z_b, theta_L, p, l); } @@ -122,7 +122,7 @@ model { vector[N] eta_z; // beta regression linear predictor for phi #include "make_eta.stan" // defines eta if (t > 0) { - #include "eta_add_Zb.stan" + #include "eta_add_Zb.stan" } if (has_intercept == 1) { if ((family == 1 || link == 2) || (family == 4 && link != 5)) eta = eta + gamma[1]; @@ -132,7 +132,7 @@ model { else { #include "eta_no_intercept.stan" // shifts eta } - + if (SSfun > 0) { // nlmer matrix[len_y, K] P; P = reshape_vec(eta, len_y, K); @@ -161,7 +161,7 @@ model { } } else if (has_weights == 0 && prior_PD == 0) { // unweighted log-likelihoods - #include "make_eta_z.stan" // linear predictor in stan_betareg + #include "make_eta_z.stan" // linear predictor in stan_betareg // adjust eta_z according to links if (has_intercept_z == 1) { if (link_phi > 1) { @@ -175,11 +175,11 @@ model { #include "eta_z_no_intercept.stan" } if (family == 1) { - if (link == 1) + if (link == 1) target += normal_lpdf(y | eta, aux); - else if (link == 2) + else if (link == 2) target += normal_lpdf(y | exp(eta), aux); - else + else target += normal_lpdf(y | divide_real_by_vector(1, eta), aux); // divide_real_by_vector() is defined in common_functions.stan } @@ -187,7 +187,7 @@ model { target += GammaReg(y, eta, aux, link, sum_log_y); } else if (family == 3) { - target += inv_gaussian(y, linkinv_inv_gaussian(eta, link), + target += inv_gaussian(y, linkinv_inv_gaussian(eta, link), aux, sum_log_y, sqrt_y); } else if (family == 4 && link_phi == 0) { @@ -200,7 +200,7 @@ model { vector[N] mu_z; mu = linkinv_beta(eta, link); mu_z = linkinv_beta_z(eta_z, link_phi); - target += beta_lpdf(y | rows_dot_product(mu, mu_z), + target += beta_lpdf(y | rows_dot_product(mu, mu_z), rows_dot_product((1 - mu) , mu_z)); } } @@ -214,20 +214,11 @@ model { target += dot_product(weights, summands); } - // Log-priors - if (prior_dist_for_aux > 0 && prior_scale_for_aux > 0) { - real log_half = -0.693147180559945286; - if (prior_dist_for_aux == 1) - target += normal_lpdf(aux_unscaled | 0, 1) - log_half; - else if (prior_dist_for_aux == 2) - target += student_t_lpdf(aux_unscaled | prior_df_for_aux, 0, 1) - log_half; - else - target += exponential_lpdf(aux_unscaled | 1); - } - + #include "priors_aux.stan" + #include "priors_glm.stan" // increments target() #include "priors_betareg.stan" - if (t > 0) decov_lp(z_b, z_T, rho, zeta, tau, + if (t > 0) decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p); } generated quantities { @@ -238,8 +229,8 @@ generated quantities { if (dense_X) alpha[1] = gamma[1] - dot_product(xbar, beta); else alpha[1] = gamma[1]; } - if (has_intercept_z == 1) { - omega_int[1] = gamma_z[1] - dot_product(zbar, omega); // adjust betareg intercept + if (has_intercept_z == 1) { + omega_int[1] = gamma_z[1] - dot_product(zbar, omega); // adjust betareg intercept } { vector[N] eta_z; @@ -280,10 +271,10 @@ generated quantities { else { // has_intercept_z == 0 #include "eta_z_no_intercept.stan" } - + if (SSfun > 0) { // nlmer vector[len_y] eta_nlmer; - matrix[len_y, K] P; + matrix[len_y, K] P; P = reshape_vec(eta, len_y, K); if (SSfun < 5) { if (SSfun <= 2) { @@ -319,7 +310,7 @@ generated quantities { if (link > 1) eta = linkinv_inv_gaussian(eta, link); for (n in 1:len_y) mean_PPD = mean_PPD + inv_gaussian_rng(eta[n], aux); } - else if (family == 4 && link_phi == 0) { + else if (family == 4 && link_phi == 0) { eta = linkinv_beta(eta, link); for (n in 1:N) { real eta_n = eta[n]; diff --git a/exec/spatial.stan b/exec/spatial.stan index 31155d08e..9362e4c06 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -1,10 +1,10 @@ +#include "Columbia_copyright.stan" +#include "license.stan" // GPL3+ // CAR SPATIAL MODELS functions { #include "continuous_likelihoods.stan" #include "binomial_likelihoods.stan" #include "count_likelihoods.stan" - // add negative_binomial likelihood - // add gamma likelihood #include "common_functions.stan" } data { @@ -88,37 +88,7 @@ transformed parameters { else if (mod == 2) psi = tau[1]*(sqrt(1-rho)*theta_raw[1] + sqrt(rho/scaling_factor)*phi); // for regression coefficients - if (prior_dist == 0) beta = z_beta; - else if (prior_dist == 1) beta = z_beta .* prior_scale + prior_mean; - else if (prior_dist == 2) for (k in 1:K) { - beta[k] = CFt(z_beta[k], prior_df[k]) * prior_scale[k] + prior_mean[k]; - } - else if (prior_dist == 3) { - if (is_continuous == 1 && family == 1) - beta = hs_prior(z_beta, global, local, global_prior_scale, aux); - else beta = hs_prior(z_beta, global, local, global_prior_scale, 1); - } - else if (prior_dist == 4) { - if (is_continuous == 1 && family == 1) - beta = hsplus_prior(z_beta, global, local, global_prior_scale, aux); - else beta = hsplus_prior(z_beta, global, local, global_prior_scale, 1); - } - else if (prior_dist == 5) // laplace - beta = prior_mean + prior_scale .* sqrt(2 * mix[1]) .* z_beta; - else if (prior_dist == 6) // lasso - beta = prior_mean + one_over_lambda[1] * prior_scale .* sqrt(2 * mix[1]) .* z_beta; - else if (prior_dist == 7) { // product_normal - int z_pos = 1; - for (k in 1:K) { - beta[k] = z_beta[z_pos]; - z_pos = z_pos + 1; - for (n in 2:num_normals[k]) { - beta[k] = beta[k] * z_beta[z_pos]; - z_pos = z_pos + 1; - } - beta[k] = beta[k] * prior_scale[k] ^ num_normals[k] + prior_mean[k]; - } - } + #include "tparameters.stan" } model { vector[N] eta; // linear predictor + spatial random effects @@ -134,7 +104,7 @@ model { } else if (family == 2) { eta = linkinv_count(eta, link); - target+= poisson_log_lpmf(y_int | eta); + target+= poisson_lpmf(y_int | eta); } else if (family == 3) { eta = linkinv_count(eta, link); @@ -147,56 +117,13 @@ model { else if (family == 5) { target += GammaReg(y_real, eta, aux, link, sum_log_y); } - // prior on spatial parameter vector + // prior on spatial parameter vector (GMRF) target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); // non-centered parameterization on beta target+= normal_lpdf(z_beta | 0, 1); // priors on coefficients - if (has_intercept == 1) { - if (prior_dist_for_intercept == 1) // normal - target += normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); - else if (prior_dist_for_intercept == 2) // student_t - target += student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, - prior_scale_for_intercept); - /* else prior_dist is 0 and nothing is added */ - } - if (K > 0) { - // Log-priors for coefficients - if (prior_dist == 1) target += normal_lpdf(z_beta | 0, 1); - else if (prior_dist == 2) target += normal_lpdf(z_beta | 0, 1); // Student t - else if (prior_dist == 3) { // hs - real log_half = -0.693147180559945286; - target += normal_lpdf(z_beta | 0, 1); - target += normal_lpdf(local[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); - target += normal_lpdf(global[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); - } - else if (prior_dist == 4) { // hs+ - real log_half = -0.693147180559945286; - target += normal_lpdf(z_beta | 0, 1); - target += normal_lpdf(local[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); - target += normal_lpdf(local[3] | 0, 1) - log_half; - // unorthodox useage of prior_scale as another df hyperparameter - target += inv_gamma_lpdf(local[4] | 0.5 * prior_scale, 0.5 * prior_scale); - target += normal_lpdf(global[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); - } - else if (prior_dist == 5) { // laplace - target += normal_lpdf(z_beta | 0, 1); - target += exponential_lpdf(mix[1] | 1); - } - else if (prior_dist == 6) { // lasso - target += normal_lpdf(z_beta | 0, 1); - target += exponential_lpdf(mix[1] | 1); - target += chi_square_lpdf(one_over_lambda[1] | prior_df[1]); - } - else if (prior_dist == 7) { // product_normal - target += normal_lpdf(z_beta | 0, 1); - } - /* else prior_dist is 0 and nothing is added */ - } + #include "priors.stan" + // model specific priors if (mod == 2) { // BYM target+= normal_lpdf(theta_raw[1] | 0, 1); // unstructured (random) effect if (prior_dist_rho == 1) @@ -216,15 +143,7 @@ model { /* else prior_dist_rho is 0 and nothing is added */ } // priors on aux - if (prior_dist_for_aux > 0 && prior_scale_for_aux > 0) { - real log_half = -0.693147180559945286; - if (prior_dist_for_aux == 1) - target += normal_lpdf(aux_unscaled | 0, 1) - log_half; - else if (prior_dist_for_aux == 2) - target += student_t_lpdf(aux_unscaled | prior_df_for_aux, 0, 1) - log_half; - else - target += exponential_lpdf(aux_unscaled | 1); - } + #include "priors_aux.stan" } generated quantities { real mean_PPD = 0; @@ -247,7 +166,7 @@ generated quantities { eta = linkinv_count(eta, link); for (n in 1:N) { if (eta[n] < poisson_max) - mean_PPD = mean_PPD + poisson_log_rng(eta[n]); + mean_PPD = mean_PPD + poisson_rng(eta[n]); else mean_PPD = mean_PPD + normal_rng(eta[n], sqrt(eta[n])); } diff --git a/inst/chunks/priors.stan b/inst/chunks/priors.stan new file mode 100644 index 000000000..ac31d3519 --- /dev/null +++ b/inst/chunks/priors.stan @@ -0,0 +1,45 @@ +// Log-priors for coefficients + if (prior_dist == 1) target += normal_lpdf(z_beta | 0, 1); +else if (prior_dist == 2) target += normal_lpdf(z_beta | 0, 1); // Student t +else if (prior_dist == 3) { // hs + real log_half = -0.693147180559945286; + target += normal_lpdf(z_beta | 0, 1); + target += normal_lpdf(local[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); + target += normal_lpdf(global[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); +} +else if (prior_dist == 4) { // hs+ + real log_half = -0.693147180559945286; + target += normal_lpdf(z_beta | 0, 1); + target += normal_lpdf(local[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); + target += normal_lpdf(local[3] | 0, 1) - log_half; + // unorthodox useage of prior_scale as another df hyperparameter + target += inv_gamma_lpdf(local[4] | 0.5 * prior_scale, 0.5 * prior_scale); + target += normal_lpdf(global[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); +} +else if (prior_dist == 5) { // laplace + target += normal_lpdf(z_beta | 0, 1); + target += exponential_lpdf(mix[1] | 1); +} +else if (prior_dist == 6) { // lasso + target += normal_lpdf(z_beta | 0, 1); + target += exponential_lpdf(mix[1] | 1); + target += chi_square_lpdf(one_over_lambda[1] | prior_df[1]); +} +else if (prior_dist == 7) { // product_normal + target += normal_lpdf(z_beta | 0, 1); +} +/* else prior_dist is 0 and nothing is added */ + +// Log-prior for intercept +if (has_intercept == 1) { + if (prior_dist_for_intercept == 1) // normal + target += normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); + else if (prior_dist_for_intercept == 2) // student_t + target += student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, + prior_scale_for_intercept); + /* else prior_dist is 0 and nothing is added */ +} diff --git a/inst/chunks/priors_aux.stan b/inst/chunks/priors_aux.stan new file mode 100644 index 000000000..986f5058c --- /dev/null +++ b/inst/chunks/priors_aux.stan @@ -0,0 +1,10 @@ +// Log-priors +if (prior_dist_for_aux > 0 && prior_scale_for_aux > 0) { + real log_half = -0.693147180559945286; + if (prior_dist_for_aux == 1) + target += normal_lpdf(aux_unscaled | 0, 1) - log_half; + else if (prior_dist_for_aux == 2) + target += student_t_lpdf(aux_unscaled | prior_df_for_aux, 0, 1) - log_half; + else + target += exponential_lpdf(aux_unscaled | 1); +} diff --git a/inst/chunks/priors_glm.stan b/inst/chunks/priors_glm.stan index 68647150f..946ba11eb 100644 --- a/inst/chunks/priors_glm.stan +++ b/inst/chunks/priors_glm.stan @@ -1,58 +1,14 @@ - // Log-priors for coefficients - if (prior_dist == 1) target += normal_lpdf(z_beta | 0, 1); - else if (prior_dist == 2) target += normal_lpdf(z_beta | 0, 1); // Student t - else if (prior_dist == 3) { // hs - real log_half = -0.693147180559945286; - target += normal_lpdf(z_beta | 0, 1); - target += normal_lpdf(local[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); - target += normal_lpdf(global[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); - } - else if (prior_dist == 4) { // hs+ - real log_half = -0.693147180559945286; - target += normal_lpdf(z_beta | 0, 1); - target += normal_lpdf(local[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); - target += normal_lpdf(local[3] | 0, 1) - log_half; - // unorthodox useage of prior_scale as another df hyperparameter - target += inv_gamma_lpdf(local[4] | 0.5 * prior_scale, 0.5 * prior_scale); - target += normal_lpdf(global[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); - } - else if (prior_dist == 5) { // laplace - target += normal_lpdf(z_beta | 0, 1); - target += exponential_lpdf(mix[1] | 1); - } - else if (prior_dist == 6) { // lasso - target += normal_lpdf(z_beta | 0, 1); - target += exponential_lpdf(mix[1] | 1); - target += chi_square_lpdf(one_over_lambda[1] | prior_df[1]); - } - else if (prior_dist == 7) { // product_normal - target += normal_lpdf(z_beta | 0, 1); - } - /* else prior_dist is 0 and nothing is added */ + #include "priors.stan" - // Log-prior for intercept - if (has_intercept == 1) { - if (prior_dist_for_intercept == 1) // normal - target += normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); - else if (prior_dist_for_intercept == 2) // student_t - target += student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, - prior_scale_for_intercept); - /* else prior_dist is 0 and nothing is added */ - } - if (K_smooth) { target += normal_lpdf(z_beta_smooth | 0, 1); if (prior_dist_for_smooth > 0) { real log_half = -0.693147180559945286; - if (prior_dist_for_smooth == 1) + if (prior_dist_for_smooth == 1) target += normal_lpdf(smooth_sd_raw | 0, 1) - log_half; else if (prior_dist_for_smooth == 2) target += student_t_lpdf(smooth_sd_raw | prior_df_for_smooth, 0, 1) - log_half; - else if (prior_dist_for_smooth == 3) + else if (prior_dist_for_smooth == 3) target += exponential_lpdf(smooth_sd_raw | 1); } } diff --git a/inst/chunks/tparameters.stan b/inst/chunks/tparameters.stan new file mode 100644 index 000000000..e050733ad --- /dev/null +++ b/inst/chunks/tparameters.stan @@ -0,0 +1,31 @@ +if (prior_dist == 0) beta = z_beta; +else if (prior_dist == 1) beta = z_beta .* prior_scale + prior_mean; +else if (prior_dist == 2) for (k in 1:K) { + beta[k] = CFt(z_beta[k], prior_df[k]) * prior_scale[k] + prior_mean[k]; +} +else if (prior_dist == 3) { + if (is_continuous == 1 && family == 1) + beta = hs_prior(z_beta, global, local, global_prior_scale, aux); + else beta = hs_prior(z_beta, global, local, global_prior_scale, 1); +} +else if (prior_dist == 4) { + if (is_continuous == 1 && family == 1) + beta = hsplus_prior(z_beta, global, local, global_prior_scale, aux); + else beta = hsplus_prior(z_beta, global, local, global_prior_scale, 1); +} +else if (prior_dist == 5) // laplace + beta = prior_mean + prior_scale .* sqrt(2 * mix[1]) .* z_beta; +else if (prior_dist == 6) // lasso + beta = prior_mean + one_over_lambda[1] * prior_scale .* sqrt(2 * mix[1]) .* z_beta; +else if (prior_dist == 7) { // product_normal + int z_pos = 1; + for (k in 1:K) { + beta[k] = z_beta[z_pos]; + z_pos = z_pos + 1; + for (n in 2:num_normals[k]) { + beta[k] = beta[k] * z_beta[z_pos]; + z_pos = z_pos + 1; + } + beta[k] = beta[k] * prior_scale[k] ^ num_normals[k] + prior_mean[k]; + } +} diff --git a/inst/chunks/tparameters_glm.stan b/inst/chunks/tparameters_glm.stan index b3836f6a2..a7a63640f 100644 --- a/inst/chunks/tparameters_glm.stan +++ b/inst/chunks/tparameters_glm.stan @@ -3,37 +3,8 @@ vector[K_smooth > 0 ? smooth_map[K_smooth] : 0] smooth_sd; vector[q] b; vector[len_theta_L] theta_L; - if (prior_dist == 0) beta = z_beta; - else if (prior_dist == 1) beta = z_beta .* prior_scale + prior_mean; - else if (prior_dist == 2) for (k in 1:K) { - beta[k] = CFt(z_beta[k], prior_df[k]) * prior_scale[k] + prior_mean[k]; - } - else if (prior_dist == 3) { - if (is_continuous == 1 && family == 1) - beta = hs_prior(z_beta, global, local, global_prior_scale, aux); - else beta = hs_prior(z_beta, global, local, global_prior_scale, 1); - } - else if (prior_dist == 4) { - if (is_continuous == 1 && family == 1) - beta = hsplus_prior(z_beta, global, local, global_prior_scale, aux); - else beta = hsplus_prior(z_beta, global, local, global_prior_scale, 1); - } - else if (prior_dist == 5) // laplace - beta = prior_mean + prior_scale .* sqrt(2 * mix[1]) .* z_beta; - else if (prior_dist == 6) // lasso - beta = prior_mean + one_over_lambda[1] * prior_scale .* sqrt(2 * mix[1]) .* z_beta; - else if (prior_dist == 7) { // product_normal - int z_pos = 1; - for (k in 1:K) { - beta[k] = z_beta[z_pos]; - z_pos = z_pos + 1; - for (n in 2:num_normals[k]) { - beta[k] = beta[k] * z_beta[z_pos]; - z_pos = z_pos + 1; - } - beta[k] = beta[k] * prior_scale[k] ^ num_normals[k] + prior_mean[k]; - } - } + + #include "tparameters.stan" if (K_smooth) { smooth_sd = prior_mean_for_smooth + prior_scale_for_smooth .* smooth_sd_raw; From aeb898b22928d925045dc091c44c6439aa4a2475 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Fri, 11 Aug 2017 01:43:47 -0400 Subject: [PATCH 22/59] draft of CAR vignette; fixing binomial lpmf bug in spatial.stan --- R/datasets.R | 24 ++--- R/loo.R | 1 + R/stan_besag.R | 11 ++- R/stan_bym.R | 5 +- R/stan_spatial.fit.R | 137 +++++++++++++--------------- data/lattice.rda | Bin 0 -> 33425 bytes data/lattice10.rda | Bin 3755 -> 0 bytes exec/spatial.stan | 80 ++++++++-------- vignettes/spatial.Rmd | 208 ++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 328 insertions(+), 138 deletions(-) create mode 100644 data/lattice.rda delete mode 100644 data/lattice10.rda create mode 100644 vignettes/spatial.Rmd diff --git a/R/datasets.R b/R/datasets.R index 58e1aa8d2..f5309986c 100644 --- a/R/datasets.R +++ b/R/datasets.R @@ -20,7 +20,7 @@ #' Small datasets for use in \pkg{rstanarm} examples and vignettes. #' #' @name rstanarm-datasets -#' @aliases kidiq roaches wells bball1970 bball2006 mortality tumors radon lattice10 +#' @aliases kidiq roaches wells bball1970 bball2006 mortality tumors radon lattice #' @format #' \describe{ #' \item{\code{bball1970}}{ @@ -139,19 +139,21 @@ #' \item \code{educ} Years of education (head of household) #' } #' } -#' \item{\code{lattice10}}{ -#' The \code{grid_sim} SpatialPolygonsDataFrame object is an artificial lattice -#' that has been used to simulate spatial dependence as a Gaussian Markov Random -#' Field (GMRF). +#' \item{\code{lattice}}{ The \code{grid_sim10} and \code{grid_sim30} +#' SpatialPolygonsDataFrame objects are a simulated lattice of 100 and 900 +#' spatial units, respectively. These objects contain spatially dependent +#' observations simulated as a Gaussian Markov Random Field (GMRF). #' -#' Souce: Simulated data +#' Source: Simulated data #' -#' 100 obs. of 3 variables #' \itemize{ -#' \item \code{gmrf} GMRF data simulated using Cholesky decomposition sampling from -#' the precision form of the Multivariate Normal distribution centered at zero. -#' \item \code{r} X-position of a location on the grid (origin is at the bottom-left). -#' \item \code{c} Y-position of a location on the grid (origin is at the bottom-left). +#' \item \code{gmrf} GMRF data simulated using Cholesky decomposition sampling +#' from the precision form of the Multivariate Normal distribution centered at +#' zero. +#' \item \code{r} X-position of a location on the grid (origin is at the +#' bottom-left). +#' \item \code{c} Y-position of a location on the grid (origin is at the +#' bottom-left). #' } #' } #' } diff --git a/R/loo.R b/R/loo.R index dc4f6ac17..708f5f9bf 100644 --- a/R/loo.R +++ b/R/loo.R @@ -140,6 +140,7 @@ loo.stanreg <- function(x, ..., k_threshold = NULL) { } else { k_threshold <- 0.7 } + loo_x <- suppressWarnings(loo.function(ll_fun(x), args = ll_args(x), ...)) bad_obs <- loo::pareto_k_ids(loo_x, k_threshold) diff --git a/R/stan_besag.R b/R/stan_besag.R index 5d36a9b9f..5f15a3d08 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -42,7 +42,7 @@ #' @param trials If \code{family = binomial()} then a vector of trials (equal #' in length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_rho The prior distribution on the variance of the non-centered structured (spatial) effect. +#' @param prior_tau The prior distribution on the variance of the non-centered structured (spatial) effect. #' #' @details The \code{stan_besag} model is similar to the analogous model in #' R-INLA. However, instead of using the integrated Laplace approximation @@ -61,9 +61,10 @@ #' @examples #' ### Simulated Data on a Lattice #' -#' data("lattice10", package = "rstanarm") +#' data("lattice", package = "rstanarm") #' #' # plot GMRF +#' grid_sim <- grid_sim10 #' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) #' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), #' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) @@ -87,13 +88,13 @@ #' pp_check(fit_besag) #' stan_besag <- function(formula, - family = gaussian(), + family = NULL, data, trials = NULL, W, ..., prior = normal(), prior_intercept = normal(), - prior_aux = NULL, prior_rho = normal(), + prior_tau = normal(), prior_aux = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -117,7 +118,7 @@ stan_besag <- function(formula, prior = prior, prior_intercept = prior_intercept, prior_aux = prior_aux, - prior_rho = prior_rho, + prior_tau = prior_tau, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/R/stan_bym.R b/R/stan_bym.R index 546ca03a2..03372be62 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -71,9 +71,10 @@ #' @examples #' ### Simulated Data on a Lattice #' -#' data("lattice10", package = "rstanarm") +#' data("lattice", package = "rstanarm") #' #' # plot GMRF +#' grid_sim <- grid_sim10 #' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) #' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), #' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) @@ -102,7 +103,7 @@ stan_bym <- function(formula, W, ..., prior = normal(), prior_intercept = normal(), - prior_aux = NULL, prior_rho = beta(0.5,0.5), prior_tau = normal(), + prior_tau = normal(), prior_rho = beta(0.5,0.5), prior_aux = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 57b8c16b6..90886f9ed 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -25,12 +25,12 @@ #' stan_spatial.fit <- function(x, y, w, - trials = NULL, - family = gaussian(), stan_function = c("stan_besag", "stan_bym"), + family = NULL, + trials = NULL, ..., prior = normal(), prior_intercept = normal(), - prior_aux = NULL, prior_rho = NULL, prior_tau = NULL, + prior_tau = normal(), prior_aux = NULL, prior_rho = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -56,34 +56,37 @@ stan_spatial.fit <- function(x, y, w, neg_binomial_2 = 3, binomial = 4, Gamma = 5) - + if (family$family %in% c("gaussian", "Gamma")) { + is_continuous <- TRUE y_real <- y - y_int <- rep(0, length(y)) - trials <- rep(0, length(y)) + y_int <- array(0, dim = c(0)) + trials <- array(0, dim = c(0)) } else { - y_real <- rep(0, length(y)) + is_continuous <- FALSE + y_real <- array(0, dim = c(0)) y_int <- y - if (family$family == "binomial") { - if (is.null(trials) | any(y > trials)) - stop("Outcome values must be less than or equal to the corresponding value in `trials`.") - - } - else { # poisson - trials <- rep(0, length(y)) - } + } + + if (family$family %in% c("binomial", "poisson")) + has_aux <- FALSE + else + has_aux <- TRUE + + if (family$family %in% c("binomial", "poisson", "neg_binomial_2")) { if(!is.integer(y_int)) stop("Outcome must be an integer for count likelihoods.") + if (family$family == "binomial" & (is.null(trials) | any(y > trials))) + stop("Outcome values must be less than or equal to the corresponding value in `trials`.") } if (stan_function == "stan_besag") - mod <- 1 + model_type <- 1 else if (stan_function == "stan_bym") - mod <- 2 + model_type <- 2 - sparse <- FALSE - x_stuff <- center_x(x, sparse) + x_stuff <- center_x(x, sparse = FALSE) for (i in names(x_stuff)) # xtemp, xbar, has_intercept assign(i, x_stuff[[i]]) nvars <- ncol(xtemp) @@ -92,12 +95,6 @@ stan_spatial.fit <- function(x, y, w, "laplace", "lasso", "product_normal") ok_intercept_dists <- ok_dists ok_scale_dists <- nlist("normal", student_t = "t", "cauchy", "exponential") - - # Deal with prior - prior_stuff <- handle_glm_prior(prior, nvars, family$link, default_scale = 2.5, - ok_dists = ok_dists) - for (i in names(prior_stuff)) # prior_{dist, mean, scale, df, autoscale} - assign(i, prior_stuff[[i]]) # Deal with prior_intercept prior_intercept_stuff <- handle_glm_prior(prior_intercept, nvars = 1, @@ -107,58 +104,51 @@ stan_spatial.fit <- function(x, y, w, "_for_intercept") for (i in names(prior_intercept_stuff)) # prior_{dist, mean, scale, df, autoscale}_for_intercept assign(i, prior_intercept_stuff[[i]]) + + # Deal with prior + prior_stuff <- handle_glm_prior(prior, nvars, family$link, default_scale = 2.5, + ok_dists = ok_dists) + for (i in names(prior_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_stuff[[i]]) - # Deal with prior_rho and prior_sigma + # Deal with prior_tau + prior_tau_stuff <- handle_glm_prior(prior_tau, nvars = 1, family$link, default_scale = 1, + ok_dists = ok_scale_dists) + names(prior_tau_stuff) <- paste0(names(prior_tau_stuff), + "_for_tau") + for (i in names(prior_tau_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_tau_stuff[[i]]) + + # Deal with prior_rho if (stan_function == "stan_bym") { - has_tau <- 1 - prior_tau_stuff <- handle_glm_prior(prior_tau, nvars = 1, family$link, default_scale = 1, - ok_dists = ok_scale_dists) - names(prior_tau_stuff) <- paste0(names(prior_tau_stuff), - "_for_tau") - for (i in names(prior_tau_stuff)) # prior_{dist, mean, scale, df, autoscale} - assign(i, prior_tau_stuff[[i]]) - # In BYM rho is constrained so appropriate prior is Beta dist. + has_rho <- 1 if (is.null(prior_rho)) { prior_dist_for_rho <- 0 - prior_rho$alpha <- 1 - prior_rho$beta <- 1 + prior_rho$alpha <- 0 + prior_rho$beta <- 0 prior_dist_name_for_rho <- NA } else { prior_dist_for_rho <- 1 prior_dist_name_for_rho <- "beta" } - - prior_mean_for_rho <- 0 - prior_scale_for_rho <- 1 - prior_df_for_rho <- 1 prior_rho_stuff <- list(prior_dist_name_for_rho = prior_dist_name_for_rho, shape1 = prior_rho$alpha, shape2 = prior_rho$beta, - prior_mean_for_rho = prior_mean_for_rho, - prior_scale_for_rho = prior_scale_for_rho, - prior_df_for_rho = prior_df_for_rho - ) + prior_mean_for_rho = 0, + prior_scale_for_rho = 0, + prior_df_for_rho = 0) } else if (stan_function == "stan_besag") { - has_tau <- 0 - prior_rho_stuff <- handle_glm_prior(prior_rho, nvars = 1, family$link, default_scale = 1, - ok_dists = ok_scale_dists) - names(prior_rho_stuff) <- paste0(names(prior_rho_stuff), - "_for_rho") - for (i in names(prior_rho_stuff)) # prior_{dist, mean, scale, df, autoscale} - assign(i, prior_rho_stuff[[i]]) - - prior_rho_stuff$shape1 <- 1 - prior_rho_stuff$shape2 <- 1 - prior_dist_for_tau <- 0 - prior_mean_for_tau <- 0 - prior_scale_for_tau <- 1 - prior_df_for_tau <- 1 + has_rho <- 0 + prior_dist_for_rho <- 0 + prior_rho_stuff <- list(prior_dist_name_for_rho = NA) + prior_scale_for_rho <- 0 + prior_rho_stuff$shape1 <- 0 + prior_rho_stuff$shape2 <- 0 } - if (family$family %in% c("gaussian","Gamma","neg_binomial_2")) { - has_aux <- 1 + if (has_aux) { prior_aux_stuff <- handle_glm_prior(prior_aux, nvars = 1, family$link, default_scale = 1, ok_dists = ok_dists) names(prior_aux_stuff) <- paste0(names(prior_aux_stuff), @@ -167,7 +157,6 @@ stan_spatial.fit <- function(x, y, w, assign(i, prior_aux_stuff[[i]]) } else { - has_aux <- 0 prior_dist_for_aux <- 0 prior_mean_for_aux <- 0 prior_scale_for_aux <- 1 @@ -205,6 +194,8 @@ stan_spatial.fit <- function(x, y, w, E_n = nrow(edges), family = family_num, link = link, + is_continuous = is_continuous, + has_aux = has_aux, X = xtemp, xbar = as.array(xbar), y_real = y_real, @@ -214,7 +205,6 @@ stan_spatial.fit <- function(x, y, w, shape2_rho = c(prior_rho_stuff$shape2), prior_dist_for_intercept = prior_dist_for_intercept, prior_dist = prior_dist, - prior_dist_rho = prior_dist_for_rho, prior_dist_tau = prior_dist_for_tau, prior_dist_for_aux = prior_dist_for_aux, prior_mean_for_intercept = c(prior_mean_for_intercept), @@ -226,21 +216,17 @@ stan_spatial.fit <- function(x, y, w, prior_mean_tau = c(prior_mean_for_tau), prior_scale_tau = c(prior_scale_for_tau), prior_df_tau = c(prior_df_for_tau), - prior_mean_rho = c(prior_mean_for_rho), - prior_scale_rho = c(prior_scale_for_rho), - prior_df_rho = c(prior_df_for_rho), prior_mean_for_aux = c(prior_mean_for_aux), prior_scale_for_aux = c(prior_scale_for_aux), prior_df_for_aux = c(prior_df_for_aux), has_intercept = has_intercept, - mod = mod, + model_type = model_type, global_prior_df, global_prior_df_for_intercept, global_prior_scale, global_prior_scale_for_intercept, - num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0)) - - standata$X <- array(standata$X, dim = c(standata$N, standata$K)) # FIX ME!!! + num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0), + prior_dist_rho = prior_dist_for_rho) # create scaling_factor a la Dan Simpson create_scaling_factor <- function(dat) { @@ -268,7 +254,7 @@ stan_spatial.fit <- function(x, y, w, else standata$scaling_factor <- 0 - pars <- c(if (has_intercept) "alpha", "beta", "rho", if(mod == 2) c("tau"), if(family$family == "gaussian") "aux", + pars <- c(if (has_intercept) "alpha", "beta", if(model_type == 2) "rho", "tau", if(has_aux) "aux", "mean_PPD", "psi") prior_info <- summarize_spatial_prior( @@ -280,17 +266,16 @@ stan_spatial.fit <- function(x, y, w, has_intercept = has_intercept, has_predictors = nvars > 0, has_aux = has_aux, - has_rho = 1, - has_tau = has_tau, + has_rho = has_rho, + has_tau = 1, adjusted_prior_scale = prior_scale, adjusted_prior_intercept_scale = prior_scale_for_intercept, - adjusted_prior_scale_rho = prior_scale_for_rho, adjusted_prior_aux_scale = prior_scale_for_aux, adjusted_prior_scale_tau = prior_scale_for_tau, family = family) stanfit <- stanmodels$spatial - + # n.b. optimizing is not supported if (algorithm == "optimizing") { out <- @@ -345,8 +330,8 @@ stan_spatial.fit <- function(x, y, w, } } new_names <- c(if (has_intercept) "(Intercept)", - colnames(xtemp), "rho", if(mod == 2) c("tau"), - if(family$family == "gaussian") "aux", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") + colnames(xtemp), if(model_type == 2) "rho", "tau", + if(has_aux) "aux", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") stanfit@sim$fnames_oi <- new_names return(structure(stanfit, prior.info = prior_info)) diff --git a/data/lattice.rda b/data/lattice.rda new file mode 100644 index 0000000000000000000000000000000000000000..be66d26fb806eb13cec153eedbac27c4b4dcda53 GIT binary patch literal 33425 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 K;Fh-=*8G2*6deTs literal 0 HcmV?d00001 diff --git a/data/lattice10.rda b/data/lattice10.rda deleted file mode 100644 index 29ada072ae29a0defd0b641ca743b9ee788e03d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3755 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 diff --git a/exec/spatial.stan b/exec/spatial.stan index 9362e4c06..f09c8cc11 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -11,23 +11,25 @@ data { int N; // number of regions int K; // number of predictors (inc intercept) matrix[N,K] X; // model matrix + int family; + int is_continuous; + int has_aux; + int model_type; // Besag = 1; BYM = 2 + int has_intercept; vector[K] xbar; - int trials[N]; // binomial trials (0 1d array if not applicable) - int y_int[N]; // outcome - vector[N] y_real; // outcome - int family; // family (1 = Gaussian, 2 = Poisson, 3 = Binomial) + int trials[family == 4 ? N : 0]; // binomial trials (0 1d array if not applicable) + int y_int[is_continuous == 1 ? 0 : N]; // outcome + vector[is_continuous == 1 ? N : 0] y_real; // outcome int link; int E_n; // number of adjacency pairs int edges[E_n, 2]; // adjacency pairs + int prior_dist_rho; real shape1_rho; // priors real shape2_rho; // priors - int has_intercept; - int mod; // 1 = besag (icar); 2 = bym real scaling_factor; int prior_dist_for_intercept; int prior_dist; int prior_dist_tau; - int prior_dist_rho; real prior_mean_for_intercept; real prior_scale_for_intercept; real prior_df_for_intercept; @@ -37,9 +39,6 @@ data { real prior_mean_tau; real prior_scale_tau; real prior_df_tau; - real prior_mean_rho; - real prior_scale_rho; - real prior_df_rho; real global_prior_df; // for hs priors only real global_prior_scale; // for hs priors only int num_normals[prior_dist == 7 ? K : 0]; @@ -49,44 +48,41 @@ data { real prior_df_for_aux; } transformed data { - real poisson_max = 30 * log(2); + real poisson_max = pow(2.0, 30.0); int hs; - int is_continuous; real sum_log_y = family == 1 ? not_a_number() : sum(log(y_real)); if (prior_dist <= 2) hs = 0; else if (prior_dist == 3) hs = 2; else if (prior_dist == 4) hs = 4; else hs = 0; - if (family == 1) is_continuous = 1; - else is_continuous = 0; } parameters { real gamma[has_intercept]; // raw intercept - vector[K] z_beta; - vector[mod == 2? N : 0] theta_raw; // used for random effect (non-spatial) + vector[K] z_beta; // standard normal term + vector[model_type == 2? N : 0] theta_raw; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) - real rho; // variance i.e. rho^2 - real tau[mod == 2? 1 : 0]; // variance i.e. tau^2 + real rho[model_type == 2]; // variance i.e. rho^2 + real tau; // variance i.e. tau^2 real global[hs]; vector[K] local[hs]; vector[K] mix[prior_dist == 5 || prior_dist == 6]; - real aux_unscaled; # interpretation depends on family! + real aux_unscaled[has_aux]; # interpretation depends on family! real one_over_lambda[prior_dist == 6]; } transformed parameters { vector[K] beta; // predictors on covariates (including intercept) // aux has to be defined first in the hs case - real aux = prior_dist_for_aux == 0 ? aux_unscaled : (prior_dist_for_aux <= 2 ? - prior_scale_for_aux * aux_unscaled + prior_mean_for_aux : - prior_scale_for_aux * aux_unscaled); + real aux = has_aux == 0 ? 0 : (prior_dist_for_aux == 0 ? aux_unscaled[1] : (prior_dist_for_aux <= 2 ? + prior_scale_for_aux * aux_unscaled[1] + prior_mean_for_aux : + prior_scale_for_aux * aux_unscaled[1])); vector[N] phi; // non-centered random effect (spatial) vector[N] psi; phi[1:(N - 1)] = phi_raw; phi[N] = -sum(phi_raw); - if (mod == 1) - psi = phi * sqrt(inv(rho)); - else if (mod == 2) - psi = tau[1]*(sqrt(1-rho)*theta_raw[1] + sqrt(rho/scaling_factor)*phi); + if (model_type == 1) + psi = phi * sqrt(inv(tau)); + else if (model_type == 2) + psi = tau*(sqrt(1-rho[1])*theta_raw[1] + sqrt(rho[1]/scaling_factor)*phi); // for regression coefficients #include "tparameters.stan" } @@ -112,38 +108,34 @@ model { } else if (family == 4) { eta = linkinv_binom(eta, link); - target+= binomial_lpmf(y_int | trials, inv_logit(eta)); + target+= binomial_lpmf(y_int | trials, eta); } else if (family == 5) { target += GammaReg(y_real, eta, aux, link, sum_log_y); } // prior on spatial parameter vector (GMRF) target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); - // non-centered parameterization on beta - target+= normal_lpdf(z_beta | 0, 1); // priors on coefficients #include "priors.stan" // model specific priors - if (mod == 2) { // BYM + if (model_type == 2) { // BYM target+= normal_lpdf(theta_raw[1] | 0, 1); // unstructured (random) effect if (prior_dist_rho == 1) - target+= beta_lpdf(rho | shape1_rho, shape2_rho); - /* else prior_dist_rho is 0 and nothing is added */ - if (prior_dist_tau == 1) - target+= normal_lpdf(tau | prior_mean_tau, prior_scale_tau); - else if (prior_dist_tau == 2) - target+= student_t_lpdf(tau | prior_df_tau, prior_mean_tau, prior_scale_tau); + target+= beta_lpdf(rho[1] | shape1_rho, shape2_rho); /* else prior_dist_tau is 0 and nothing is added */ } - else { // besag - if (prior_dist_rho == 1) - target+= normal_lpdf(rho | prior_mean_rho, prior_scale_rho); - else if (prior_dist_rho == 2) - target+= student_t_lpdf(rho | prior_df_rho, prior_mean_rho, prior_scale_rho); - /* else prior_dist_rho is 0 and nothing is added */ + // prior on overall spatial variation + if (prior_dist_tau == 1) + target+= normal_lpdf(tau | prior_mean_tau, prior_scale_tau); + else if (prior_dist_tau == 2) + target+= student_t_lpdf(tau | prior_df_tau, prior_mean_tau, prior_scale_tau); + else if (prior_dist_tau == 3) + target+= exponential_lpdf(tau | prior_scale_tau); + /* else prior_dist_tau is 0 and nothing is added */ + // priors on auxilliary parameters (Log-priors) + if (has_aux == 1) { + #include "priors_aux.stan" } - // priors on aux - #include "priors_aux.stan" } generated quantities { real mean_PPD = 0; diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd new file mode 100644 index 000000000..c1de86a74 --- /dev/null +++ b/vignettes/spatial.Rmd @@ -0,0 +1,208 @@ +--- +title: "CAR Spatial Models with rstanarm" +author: "Imad Ali, Jonah Gabry and Ben Goodrich" +date: "`r Sys.Date()`" +output: + html_vignette: + toc: yes +params: + EVAL: !r identical(Sys.getenv("NOT_CRAN"), "true") +--- + +```{r, child="children/SETTINGS-knitr.txt"} +``` +```{r, child="children/SETTINGS-gg.txt"} +``` +```{r, child="children/SETTINGS-rstan.txt"} +``` +```{r, child="children/SETTINGS-loo.txt"} +``` + +# Introduction + +This vignette explains how to account for spatial variation with conditional autoregressive (CAR) models when modeling discrete or continuous outcomes using the `stan_besag` and `stan_bym` functions in the __rstanarm__ package. The `stan_besag` function allows you to model space as an intrinsic conditional autoregressive model (ICAR) and the `stan_bym` is a variant of the Besag, York, Mollie (YEAR) model where the priors are more interpretable. + +```{r, child="children/four_steps.txt"} +``` + +Steps 3 and 4 are covered in more depth by the vignette entitled ["How to Use +the __rstanarm__ Package"](rstanarm.html). This vignette focuses on Step 1 when +the likelihood is the product of beta distributions. + +# Likelihood + +The likelihoods supported in each function include Gaussian, Binomial, Poisson, Negative Binomial, and Gamma. For details on the link functions available and the contribution to the posterior of each of these likelihoods consult the appropriate vignettes. Depending on the choice of likelihood there may or may not be an additional auxilliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data, whereas in a Binomial likelihood this would be omitted from the posterior). So the general form of the likelihood is, +$$ +\mathcal{L}(\gamma | \mathbf{y}) = \prod_{i=1}^N f(y_i | \gamma) +$$ + +Since it is straightforward to apply the modeler's choice of likelihood and link function we focus on the linear predictor. The linear predictor takes the following form, +$$ +\boldsymbol{\eta} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\psi} +$$ +where $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors, $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect. Here, $N$ denotes the number of spatial regions. The construction of $\boldsymbol{\psi}$ depends on the model, and this is discussed in the relevant sections below. + +# GMRF Hierarchical Component + +The core of the CAR models require that you define the spatial component as a Gaussian Markov Random Field (GMRF). The random vector $\boldsymbol{\phi}$ is a GMRF with respect to the graph $\mathcal{G} = (\mathcal{V} = \{1,\ldots,n\},\mathcal{E})$ with mean vector $\boldsymbol{\mu}$ and precision matrix $\mathbf{W}$ if its probability density function takes the precision form of the multivariate normal distribution, +$$ +f(\boldsymbol{\phi} | \boldsymbol{\mu}) = (2\pi)^{-n/2} |\mathbf{W}|^{1/2} +\exp\bigg( -\frac{1}{2}(\boldsymbol{\phi-\mu})^{\top}\mathbf{W}(\boldsymbol{\phi-\mu}) \bigg) +$$ +and $W_{i,j} \neq 0$ when $\{i,j\}\in\mathcal{E}$ for all $i \neq j$. Here, $\mathcal{V}$ refers to the verticies on the graph (i.e. the spatial units) and $\mathcal{E}$ refers to the edges on the graph (i.e. the spatial units that are neighbors). So $\mathbf{W}$ is an $N$-by-$N$ matrix (with zeros on the diagonal) which describes spatial adjacency. + +Unfortunately there is no guarantee that $\mathbf{W}$ is positive definite so $\mathbf{Q} = \mbox{diag}(\mathbf{W1}) - W$ (which is guaranteed to be positive semi-definite) is used as the precision matrix. + +One interpretation of CAR models is that they are in fact hierarchical models as the spatial component enters hierarchically. This is evident in the description of the model priors below. + +# Besag (ICAR) Spatial Priors + +The `stan_besag` function fits the data to an ICAR model. This means that the spatial effect enters the linear predictor as +$$ +\begin{align} +\boldsymbol{\psi} = \boldsymbol{\phi} \\ +f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\rho\mathbf{Q}|^{1/2} +\exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\rho\mathbf{Q}\boldsymbol{\phi} \bigg) +\end{align} +$$ + +where $\rho$ is a scalar that controls the overall spatial variation and has an appropriate hyperprior distribution. + +# BYM Spatial Priors + +The `stan_bym` model fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and unstructured (random) effect, +$$ +\begin{align} +\boldsymbol{\psi} &= \tau(\boldsymbol{\theta}\sqrt{1-\rho} + \boldsymbol{\phi}\sqrt{\rho}) \\ +f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\mathbf{Q}|^{1/2} +\exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\mathbf{Q}\boldsymbol{\phi} \bigg) \\ +f(\theta_i) &= (2\pi\sigma^2)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} +\end{align} +$$ +Note that the unstructured effect $\boldsymbol{\theta}$ is distributed standard normal + +# Posterior + +Combining these components yields the following posteriors. For `stan_besag` we have, +$$ +f(\boldsymbol{\beta},\boldsymbol{\phi}, \rho, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto +\prod_{i=1}^N f(y_i | \gamma) \times +\prod_{k=1}^K f(\beta_k) \times +f(\boldsymbol{\phi} | \mathbf{Q}, \rho) \times +f(\rho) \times +f(\lambda) +$$ + +and for `stan_bym` we have, +$$ +f(\boldsymbol{\beta},\boldsymbol{\phi}, \boldsymbol{\theta}, \rho, \tau, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto +\prod_{i=1}^N f(y_i | \gamma) \times +\prod_{k=1}^K f(\beta_k) \times +f(\boldsymbol{\phi} | \mathbf{Q}, \rho) \times +\prod_{k=1}^K f(\theta_i) \times +f(\rho) \times +f(\tau) \times +f(\lambda) +$$ + +# An Example Using Simulated Data on a Lattice + +As an example we use spatial units defined on a lattice. Below we plot a GMRF of 100 spatial units available in the rstanarm package. + +```{r load-lattice, fig.align='center', fig.height=5} +library(spdep) +# Load the preconstruced lattice/GMRF +data("lattice30", package = "rstanarm") +# plot the GMRF +var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) +spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), + col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) +``` + +Now we simulate predictors and a binomial outcome for the ICAR model. + +```{r simulate-data} +# Convert a spatial polygon to an N-by-N weight matrix +sp2weightmatrix <- function(spatialpolygon) { + spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +} +# Neighborhood matrix +W <- sp2weightmatrix(grid_sim) +# Simulate predictors and outcome +x <- rnorm(nrow(W), 2, 1) +z <- rnorm(nrow(W), -1, 1) +trials <- rep(10, nrow(W)) +spatial_data <- data.frame(x, z, phi = grid_sim@data$gmrf, trials) +eta <- binomial(link="logit")$linkinv(0.5 + 0.4 * x + 0.8 * z + spatial_data$phi) +spatial_data$y <- rbinom(nrow(W), trials, eta) +table(spatial_data$y) +``` + +Plotting the outcome data on the lattice gives us a better understanding of its spatial variation. + +```{r plot-outcome} +grid_sim@data$y <- spatial_data$y +var_range_y <- seq(min(grid_sim@data$y), max(grid_sim@data$y) + 1, by = 1) +spplot(grid_sim, "y", at = var_range_y, main = expression(y), + col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(max(var_range_y) + 1)) +``` + +Now we can fit the model with `stan_besag`. + +```{r fit-besag, results = "hide"} +library(rstanarm) +fit_besag <- stan_besag(y ~ 1 + x + z, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), + family = binomial(link="logit"), trials = spatial_data$trials, + chains = CHAINS, cores = CORES, seed = SEED, iter = ITER) +fit_besag_bad <- stan_besag(y ~ 1 + x + I(x^2), data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), + family = binomial(link="logit"), trials = spatial_data$trials, + chains = CHAINS, cores = CORES, seed = SEED, iter = ITER) +print(fit_besag) +print(fit_besag_bad) +``` + +As a two-dimensional posterior predictive check we can plot the posterior predictions on the lattice using the `posterior_predict` function. +```{r ppcheck-1d, fig.align='center', fig.height=5} +grid_sim@data$y_pred <- colMeans(posterior_predict(fit_besag)) +var_range_y_pred <- seq(min(grid_sim@data$y_pred), max(grid_sim@data$y_pred) + 1, by = 1) +spplot(grid_sim, "y", at = var_range_y_pred, main = expression(y[pred]), + col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(max(var_range_y_pred) + 1)) +``` + +Alternatively we can look at the conventional one-dimensional posterior predictive check with the `pp_check` function. +```{r ppcheck-1d, fig.align='center', fig.height=5} +pp_check(fit_besag) + +``` + +Compare model predictive performance using the [loo](http://mc-stan.org/loo) package. + +```{r loo-besag} +library(loo) +loo_besag <- loo(fit_besag) +loo_besag_bad <- loo(fit_besag_bad) +print(loo_besag) +print(loo_besag_bad) +``` + +```{r loo-besag-compare} +compare(loo_besag, loo_besag_bad) +``` + +One way to + +# References + +Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. _arXiv_ preprint arXiv:1601.01180. + +Rue, H. and Held, L. (2005) _Gaussian Markov Random Fields: Theory And Applications (Monographs on Statistics and Applied Probability)._ Chapman & Hall/CRC, Boca Raton, FL. + +Rue, H. and Martino, S. (2007) Approximate Bayesian inference for hierarchical Gaussian Markov random fields models. _Journal of Statistical Planning and Inference._ Vol. 137, p3177-3192. + +Simpson, D., Rue, H., Martins, T.G., Riebler, A. and Sorbye, S.H. (2015). Penalising model component complexity: A principled, practical approach to constructing priors. _arXiv_ preprint arXiv:1403.4630. + From 81cf7f6f9ad7d706985bca77167a702e6a0e55f7 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sat, 12 Aug 2017 20:49:52 -0400 Subject: [PATCH 23/59] updating documentation/vignette for CAR models --- R/stan_besag.R | 40 +++++++++++++++++++---------- R/stan_bym.R | 47 ++++++++++++++++++++------------- R/stan_spatial.fit.R | 11 ++++---- vignettes/spatial.Rmd | 60 ++++++++++++++++++++++++------------------- 4 files changed, 94 insertions(+), 64 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 5f15a3d08..b019b6464 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -15,19 +15,22 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -#' Bayesian intrinsic conditional autoregressive (ICAR) models via Stan +#' Bayesian spatial ICAR models via Stan #' #' Spatial regression modeling with an intrinsic conditional autoregressive (ICAR) prior. #' #' @rdname stan_besag #' @export #' +#' @templateVar fun stan_besag +#' @templateVar fitfun stan_spatial.fit +#' @templateVar pkg rstanarm +#' @templateVar pkgfun stan_glm +#' @templateVar sameargs family #' @template return-stanreg-object #' @template return-stanfit-object -#' @template see-also #' @template args-formula-data-subset #' @template args-same-as -#' @template args-same-as-rarely #' @template args-x-y #' @template args-dots #' @template args-prior_intercept @@ -37,26 +40,32 @@ #' @template args-adapt_delta #' @template args-QR #' -#' @param family Distribution associated with the outcome. Gaussian, Binomial, -#' and Poisson families are supported. -#' @param trials If \code{family = binomial()} then a vector of trials (equal -#' in length to the outcome) must be declared. +#' @param trials If \code{family = binomial()} then a vector of trials (equal in +#' length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_tau The prior distribution on the variance of the non-centered structured (spatial) effect. -#' -#' @details The \code{stan_besag} model is similar to the analogous model in -#' R-INLA. However, instead of using the integrated Laplace approximation +#' @param prior_tau The prior distribution on the variance of the non-centered +#' structured (spatial) effect. +#' @param order Order of the spatial random walk. Specifying \code{order = 2} +#' will smooth the spatial variation. The default is \code{order = 1}. +#' +#' @details The \code{stan_besag} model is similar to the Besag model in R-INLA. +#' However, instead of using the integrated nested Laplace approximation #' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} #' is \code{"sampling"}) via MCMC. The model includes priors on the intercept, -#' regression coefficients, and the relevant scale parameters. The -#' \code{stan_besag} function calls the workhorse \code{stan_spatial.fit} -#' function, but it is also possible to call the latter directly. +#' regression coefficients, overall spatial variation, and any applicable +#' auxiliary parameters. The \code{stan_besag} function calls the workhorse +#' \code{stan_spatial.fit} function, but it is also possible to call the +#' latter directly. #' #' @seealso The vignette for \code{stan_besag}. #' #' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An #' intuitive Bayesian spatial model for disease mapping that accounts for #' scaling. arXiv preprint arXiv:1601.01180. +#' +#' Besag, J. (1974). Spatial Interaction and the Statistical Analysis of +#' Lattice Systems. Journal of the Royal Statistical Society. Vol 36, No 2, +#' p192-236. #' #' @examples #' ### Simulated Data on a Lattice @@ -92,6 +101,7 @@ stan_besag <- function(formula, data, trials = NULL, W, + order = c(1,2), ..., prior = normal(), prior_intercept = normal(), prior_tau = normal(), prior_aux = NULL, @@ -104,6 +114,7 @@ stan_besag <- function(formula, stop(paste("Please install and load the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) + order <- match.arg(order) family <- validate_family(family) mf <- model.frame(mc, data) mt <- terms(formula, data = data) @@ -114,6 +125,7 @@ stan_besag <- function(formula, trials = trials, family = family, stan_function = stan_function, + order = order, ..., prior = prior, prior_intercept = prior_intercept, diff --git a/R/stan_bym.R b/R/stan_bym.R index 03372be62..99b5c0e60 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -15,18 +15,21 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -#' Bayesian conditional autoregressive (CAR) BYM models via Stan +#' Bayesian spatial CAR BYM models via Stan #' -#' Spatial regression modeling with the Besag, York, Mollie conditional autoregressive (CAR) prior. +#' Spatial regression modeling with a variant of the Besag, York, Mollie (BYM) conditional autoregressive (CAR) prior. #' #' @export #' +#' @templateVar fun stan_bym +#' @templateVar fitfun stan_spatial.fit +#' @templateVar pkg rstanarm +#' @templateVar pkgfun stan_glm +#' @templateVar sameargs family #' @template return-stanreg-object #' @template return-stanfit-object -#' @template see-also #' @template args-formula-data-subset #' @template args-same-as -#' @template args-same-as-rarely #' @template args-x-y #' @template args-dots #' @template args-prior_intercept @@ -36,27 +39,28 @@ #' @template args-adapt_delta #' @template args-QR #' -#' @param family Distribution associated with the outcome. Gaussian, Binomial, -#' and Poisson families are supported. #' @param trials If \code{family = binomial()} then a vector of trials (equal in #' length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_rho The prior on the proportion of the marginal variance that is -#' explained by the structured (spatial) effect. The hyperparameter \code{rho} -#' is in the unit interval so users have the option of declaring a Beta prior -#' distribution or a flat prior. A prior distribution with more mass around 1 -#' is analogous to the prior belief that there exists a strong spatial -#' relationship on the graph. #' @param prior_tau The prior on the marginal variance contribution of the #' structured (spatial) and unstructured (random) effect. +#' @param prior_rho The prior on the proportion of the marginal variance that is +#' explained by the structured (spatial) effect. The hyperparameter \code{rho} +#' is on the unit interval so users have the option of declaring a Beta prior +#' distribution or a flat prior. A prior distribution with most of the mass +#' around 1 is analogous to the prior belief that there exists a strong +#' spatial relationship on the graph. +#' @param order Order of the spatial random walk. Specifying \code{order = 2} +#' will smooth the spatial variation. The default is \code{order = 1}. #' -#' @details The \code{stan_bym} model is similar to the analogous model in -#' R-INLA. However, instead of using the integrated Laplace approximation -#' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} +#' @details The \code{stan_bym} model is similar to the BYM2 model in R-INLA. +#' However, instead of using the integrated nested Laplace approximation +#' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} #' is \code{"sampling"}) via MCMC. The model includes priors on the intercept, -#' regression coefficients, and the relevant scale/mixing parameters. The -#' \code{stan_bym} function calls the workhorse \code{stan_spatial.fit} -#' function, but it is also possible to call the latter directly. +#' regression coefficients, spatial mixing parameter, overall spatial +#' variation, and any applicable auxiliary parameters. The \code{stan_bym} +#' function calls the workhorse \code{stan_spatial.fit} function, but it is +#' also possible to call the latter directly. #' #' @seealso The vignette for \code{stan_bym}. #' @@ -64,6 +68,10 @@ #' intuitive Bayesian spatial model for disease mapping that accounts for #' scaling. arXiv preprint arXiv:1601.01180. #' +#' Besag, J., York, J. and Mollié, A. (1991). Bayesian image restoration, with +#' two applications in spatial statistics. Annals of the Institute of +#' Statistical Mathematics. Vol. 43, No. 01, p1-20. +#' #' Simpson, D., Rue, H., Martins, T.G., Riebler, A. and Sorbye, S.H. (2015). #' Penalising model component complexity: A principled, practical approach to #' constructing priors. arXiv preprint arXiv:1403.4630. @@ -101,6 +109,7 @@ stan_bym <- function(formula, data, trials = NULL, W, + order = c(1,2), ..., prior = normal(), prior_intercept = normal(), prior_tau = normal(), prior_rho = beta(0.5,0.5), prior_aux = NULL, @@ -113,6 +122,7 @@ stan_bym <- function(formula, stop(paste("Please install the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) + order <- match.arg(order) family <- validate_family(family) mf <- model.frame(mc, data) mt <- terms(formula, data = data) @@ -128,6 +138,7 @@ stan_bym <- function(formula, trials = trials, family = family, stan_function = stan_function, + order = order, ..., prior = prior, prior_intercept = prior_intercept, diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 90886f9ed..a708e2baa 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -15,11 +15,11 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -#' Workhorse function for CAR spatial models. +#' Workhorse function for CAR models. #' -#' Both \code{stan_besag} and \code{stan_bym} call \code{stan_spatial.fit} to fit -#' the appropriate spatial model. See the documentation for either model for further -#' details on the arguments of \code{stan_spatial.fit}. +#' Both \code{stan_besag} and \code{stan_bym} call \code{stan_spatial.fit} to +#' fit the appropriate spatial model. See the documentation for either modeling +#' function for further details on the arguments of \code{stan_spatial.fit}. #' #' @export #' @@ -28,6 +28,7 @@ stan_spatial.fit <- function(x, y, w, stan_function = c("stan_besag", "stan_bym"), family = NULL, trials = NULL, + order = c(1,2), ..., prior = normal(), prior_intercept = normal(), prior_tau = normal(), prior_aux = NULL, prior_rho = NULL, @@ -35,7 +36,7 @@ stan_spatial.fit <- function(x, y, w, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { - # check that W is appropriate + # convert W to a sparse matrix if not already sparse. algorithm <- match.arg(algorithm) diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index c1de86a74..5d758597d 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -21,7 +21,7 @@ params: ```{r, child="children/SETTINGS-loo.txt"} ``` -# Introduction +## Introduction This vignette explains how to account for spatial variation with conditional autoregressive (CAR) models when modeling discrete or continuous outcomes using the `stan_besag` and `stan_bym` functions in the __rstanarm__ package. The `stan_besag` function allows you to model space as an intrinsic conditional autoregressive model (ICAR) and the `stan_bym` is a variant of the Besag, York, Mollie (YEAR) model where the priors are more interpretable. @@ -32,22 +32,24 @@ Steps 3 and 4 are covered in more depth by the vignette entitled ["How to Use the __rstanarm__ Package"](rstanarm.html). This vignette focuses on Step 1 when the likelihood is the product of beta distributions. -# Likelihood +## Likelihood -The likelihoods supported in each function include Gaussian, Binomial, Poisson, Negative Binomial, and Gamma. For details on the link functions available and the contribution to the posterior of each of these likelihoods consult the appropriate vignettes. Depending on the choice of likelihood there may or may not be an additional auxilliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data, whereas in a Binomial likelihood this would be omitted from the posterior). So the general form of the likelihood is, +The likelihoods supported in each function include Gaussian, Binomial, Poisson, Negative Binomial, and Gamma. For details on the link functions available and the contribution to the posterior of each of these likelihoods consult the appropriate [vignette](http://mc-stan.org/rstanarm/articles/index.html). + +The linear predictor takes the following form, $$ -\mathcal{L}(\gamma | \mathbf{y}) = \prod_{i=1}^N f(y_i | \gamma) +\boldsymbol{\eta} = \alpha + \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\psi} $$ +where $\alpha$ is the intercept, $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors, $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect (and $N$ denotes the number of spatial units). The construction of $\boldsymbol{\psi}$ depends on the model, and this is discussed in the relevant sections below. -Since it is straightforward to apply the modeler's choice of likelihood and link function we focus on the linear predictor. The linear predictor takes the following form, +Depending on the choice of likelihood there may or may not be an additional auxiliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data). Thus, for some probability density/mass function $f$ the general form of the likelihood is, $$ -\boldsymbol{\eta} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\psi} +\mathcal{L}(\alpha, \boldsymbol{\beta}, \gamma | \mathbf{y}) = \prod_{i=1}^N f(y_i | \alpha, \boldsymbol{\beta}, \gamma ) $$ -where $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors, $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect. Here, $N$ denotes the number of spatial regions. The construction of $\boldsymbol{\psi}$ depends on the model, and this is discussed in the relevant sections below. -# GMRF Hierarchical Component +## GMRF Hierarchical Component -The core of the CAR models require that you define the spatial component as a Gaussian Markov Random Field (GMRF). The random vector $\boldsymbol{\phi}$ is a GMRF with respect to the graph $\mathcal{G} = (\mathcal{V} = \{1,\ldots,n\},\mathcal{E})$ with mean vector $\boldsymbol{\mu}$ and precision matrix $\mathbf{W}$ if its probability density function takes the precision form of the multivariate normal distribution, +CAR models require that you define the spatial component as a Gaussian Markov Random Field (GMRF). The random vector $\boldsymbol{\phi}$ is a GMRF with respect to the graph $\mathcal{G} = (\mathcal{V} = \{1,\ldots,n\},\mathcal{E})$ with mean vector $\boldsymbol{\mu}$ and precision matrix $\mathbf{W}$ if its probability density function takes the precision form of the multivariate normal distribution, $$ f(\boldsymbol{\phi} | \boldsymbol{\mu}) = (2\pi)^{-n/2} |\mathbf{W}|^{1/2} \exp\bigg( -\frac{1}{2}(\boldsymbol{\phi-\mu})^{\top}\mathbf{W}(\boldsymbol{\phi-\mu}) \bigg) @@ -56,24 +58,22 @@ and $W_{i,j} \neq 0$ when $\{i,j\}\in\mathcal{E}$ for all $i \neq j$. Here, $\ma Unfortunately there is no guarantee that $\mathbf{W}$ is positive definite so $\mathbf{Q} = \mbox{diag}(\mathbf{W1}) - W$ (which is guaranteed to be positive semi-definite) is used as the precision matrix. -One interpretation of CAR models is that they are in fact hierarchical models as the spatial component enters hierarchically. This is evident in the description of the model priors below. - -# Besag (ICAR) Spatial Priors +## Besag (ICAR) Spatial Prior The `stan_besag` function fits the data to an ICAR model. This means that the spatial effect enters the linear predictor as $$ \begin{align} \boldsymbol{\psi} = \boldsymbol{\phi} \\ -f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\rho\mathbf{Q}|^{1/2} -\exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\rho\mathbf{Q}\boldsymbol{\phi} \bigg) +f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\tau\mathbf{Q}|^{1/2} +\exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\tau\mathbf{Q}\boldsymbol{\phi} \bigg) \end{align} $$ where $\rho$ is a scalar that controls the overall spatial variation and has an appropriate hyperprior distribution. -# BYM Spatial Priors +## Variant of the BYM Spatial Prior -The `stan_bym` model fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and unstructured (random) effect, +The `stan_bym` model fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and thex unstructured (random) effect, $$ \begin{align} \boldsymbol{\psi} &= \tau(\boldsymbol{\theta}\sqrt{1-\rho} + \boldsymbol{\phi}\sqrt{\rho}) \\ @@ -82,13 +82,13 @@ f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\mathbf{Q}|^{1/2} f(\theta_i) &= (2\pi\sigma^2)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} \end{align} $$ -Note that the unstructured effect $\boldsymbol{\theta}$ is distributed standard normal +Note that the unstructured effect $\boldsymbol{\theta}$ is distributed standard normal. -# Posterior +## Posterior Combining these components yields the following posteriors. For `stan_besag` we have, $$ -f(\boldsymbol{\beta},\boldsymbol{\phi}, \rho, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto +f(\alpha, \boldsymbol{\beta},\boldsymbol{\phi}, \rho, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto \prod_{i=1}^N f(y_i | \gamma) \times \prod_{k=1}^K f(\beta_k) \times f(\boldsymbol{\phi} | \mathbf{Q}, \rho) \times @@ -98,7 +98,7 @@ $$ and for `stan_bym` we have, $$ -f(\boldsymbol{\beta},\boldsymbol{\phi}, \boldsymbol{\theta}, \rho, \tau, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto +f(\alpha, \boldsymbol{\beta},\boldsymbol{\phi}, \boldsymbol{\theta}, \rho, \tau, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto \prod_{i=1}^N f(y_i | \gamma) \times \prod_{k=1}^K f(\beta_k) \times f(\boldsymbol{\phi} | \mathbf{Q}, \rho) \times @@ -108,14 +108,15 @@ f(\tau) \times f(\lambda) $$ -# An Example Using Simulated Data on a Lattice +## An Example Using Simulated Data on a Lattice As an example we use spatial units defined on a lattice. Below we plot a GMRF of 100 spatial units available in the rstanarm package. ```{r load-lattice, fig.align='center', fig.height=5} library(spdep) # Load the preconstruced lattice/GMRF -data("lattice30", package = "rstanarm") +data("lattice", package = "rstanarm") +grid_sim <- grid_sim30 # plot the GMRF var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), @@ -167,7 +168,7 @@ print(fit_besag_bad) ``` As a two-dimensional posterior predictive check we can plot the posterior predictions on the lattice using the `posterior_predict` function. -```{r ppcheck-1d, fig.align='center', fig.height=5} +```{r ppcheck-2d, fig.align='center', fig.height=5} grid_sim@data$y_pred <- colMeans(posterior_predict(fit_besag)) var_range_y_pred <- seq(min(grid_sim@data$y_pred), max(grid_sim@data$y_pred) + 1, by = 1) spplot(grid_sim, "y", at = var_range_y_pred, main = expression(y[pred]), @@ -177,7 +178,6 @@ spplot(grid_sim, "y", at = var_range_y_pred, main = expression(y[pred]), Alternatively we can look at the conventional one-dimensional posterior predictive check with the `pp_check` function. ```{r ppcheck-1d, fig.align='center', fig.height=5} pp_check(fit_besag) - ``` Compare model predictive performance using the [loo](http://mc-stan.org/loo) package. @@ -194,11 +194,17 @@ print(loo_besag_bad) compare(loo_besag, loo_besag_bad) ``` -One way to +## Smoothing the Spatial Random Walk + +In some cases modeling the GMRF spatial component with the precsion matrix $\mathbf{Q}$ leads to rough spatial varation. This occurs when dealing with spatial units on a lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation. Below we visually illustrate this result with a random walk in one-dimension using the `stan_rw` function with the argument `smooth = TRUE`. + +## References + +Besag, J. (1974). Spatial Interaction and the Statistical Analysis of Lattice Systems. _Journal of the Royal Statistical Society._ Vol. 36, No. 2, p192-236. -# References +Besag, J., York, J. and Mollié, A. (1991). Bayesian image restoration, with two applications in spatial statistics. _Annals of the Institute of Statistical Mathematics._ Vol. 43, No. 01, p1-20. -Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. _arXiv_ preprint arXiv:1601.01180. +Riebler, A., Sorbye, S.H., Simpson, D. and Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. _arXiv_ preprint arXiv:1601.01180. Rue, H. and Held, L. (2005) _Gaussian Markov Random Fields: Theory And Applications (Monographs on Statistics and Applied Probability)._ Chapman & Hall/CRC, Boca Raton, FL. From b65253c4c9ba7683e713ddd616af8caafe872056 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sat, 12 Aug 2017 21:37:26 -0400 Subject: [PATCH 24/59] adding 2nd order spatial random walks --- R/stan_besag.R | 3 +-- R/stan_bym.R | 3 +-- R/stan_spatial.fit.R | 64 +++++++++++++++++++++++++++++--------------- exec/spatial.stan | 31 ++++++++++++++------- 4 files changed, 65 insertions(+), 36 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index b019b6464..c57cacd47 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -101,7 +101,7 @@ stan_besag <- function(formula, data, trials = NULL, W, - order = c(1,2), + order = 1, ..., prior = normal(), prior_intercept = normal(), prior_tau = normal(), prior_aux = NULL, @@ -114,7 +114,6 @@ stan_besag <- function(formula, stop(paste("Please install and load the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) - order <- match.arg(order) family <- validate_family(family) mf <- model.frame(mc, data) mt <- terms(formula, data = data) diff --git a/R/stan_bym.R b/R/stan_bym.R index 99b5c0e60..fd08a16d8 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -109,7 +109,7 @@ stan_bym <- function(formula, data, trials = NULL, W, - order = c(1,2), + order = 1, ..., prior = normal(), prior_intercept = normal(), prior_tau = normal(), prior_rho = beta(0.5,0.5), prior_aux = NULL, @@ -122,7 +122,6 @@ stan_bym <- function(formula, stop(paste("Please install the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) algorithm <- match.arg(algorithm) - order <- match.arg(order) family <- validate_family(family) mf <- model.frame(mc, data) mt <- terms(formula, data = data) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index a708e2baa..697f78ea8 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -87,6 +87,9 @@ stan_spatial.fit <- function(x, y, w, else if (stan_function == "stan_bym") model_type <- 2 + if (!(order %in% c(1,2))) + stop("Argument 'order' must be 1 or 2.") + x_stuff <- center_x(x, sparse = FALSE) for (i in names(x_stuff)) # xtemp, xbar, has_intercept assign(i, x_stuff[[i]]) @@ -228,33 +231,29 @@ stan_spatial.fit <- function(x, y, w, global_prior_scale_for_intercept, num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0), prior_dist_rho = prior_dist_for_rho) - - # create scaling_factor a la Dan Simpson - create_scaling_factor <- function(dat) { - edges <- dat$edges - #Build the adjacency matrix - adj.matrix <- Matrix::sparseMatrix(i=edges[,1],j=edges[,2],x=1,symmetric=TRUE) - #The ICAR precision matrix (note! This is singular) - Q <- Matrix::Diagonal(dat$N, Matrix::rowSums(adj.matrix)) - adj.matrix - - #Add a small jitter to the diagonal for numerical stability (optional but recommended) - Q_pert <- Q + Matrix::Diagonal(dat$N) * max(Matrix::diag(Q)) * sqrt(.Machine$double.eps) - - # Compute the diagonal elements of the covariance matrix subject to the - # constraint that the entries of the ICAR sum to zero. - # See the function help for further details. - Q_inv <- inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) - - # Compute the geometric mean of the variances, which are on the diagonal of Q.inv - scaling_factor <- exp(mean(log(Matrix::diag(Q_inv)))) - return(scaling_factor) - } if (stan_function == "stan_bym") standata$scaling_factor <- create_scaling_factor(standata) else standata$scaling_factor <- 0 - + + standata$order <- order + if (order == 2) { + Q <- diag(rowSums(W) - W) + Q <- Q %*% Q + sparse_stuff <- rstan::extract_sparse_parts(Q) + standata$Q_n <- as.array(length(sparse_stuff$w), dim = 1) + standata$w <- sparse_stuff$w + standata$v <- sparse_stuff$v + standata$u <- sparse_stuff$u + } + if (order == 1) { + standata$Q_n <- array(0, dim = c(0)) + standata$w <- array(0, dim = c(0)) + standata$v <- array(0, dim = c(0)) + standata$u <- array(0, dim = c(0)) + } + pars <- c(if (has_intercept) "alpha", "beta", if(model_type == 2) "rho", "tau", if(has_aux) "aux", "mean_PPD", "psi") @@ -339,6 +338,27 @@ stan_spatial.fit <- function(x, y, w, } } +# create scaling_factor a la Dan Simpson +create_scaling_factor <- function(dat) { + edges <- dat$edges + #Build the adjacency matrix + adj.matrix <- Matrix::sparseMatrix(i=edges[,1],j=edges[,2],x=1,symmetric=TRUE) + #The ICAR precision matrix (note! This is singular) + Q <- Matrix::Diagonal(dat$N, Matrix::rowSums(adj.matrix)) - adj.matrix + + #Add a small jitter to the diagonal for numerical stability (optional but recommended) + Q_pert <- Q + Matrix::Diagonal(dat$N) * max(Matrix::diag(Q)) * sqrt(.Machine$double.eps) + + # Compute the diagonal elements of the covariance matrix subject to the + # constraint that the entries of the ICAR sum to zero. + # See the function help for further details. + Q_inv <- inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) + + # Compute the geometric mean of the variances, which are on the diagonal of Q.inv + scaling_factor <- exp(mean(log(Matrix::diag(Q_inv)))) + return(scaling_factor) +} + # Summarize spatial prior summarize_spatial_prior <- function(user_prior, diff --git a/exec/spatial.stan b/exec/spatial.stan index f09c8cc11..3bbc65609 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -12,20 +12,28 @@ data { int K; // number of predictors (inc intercept) matrix[N,K] X; // model matrix int family; + int link; int is_continuous; int has_aux; - int model_type; // Besag = 1; BYM = 2 + int model_type; // 0 = 1D RW; Besag = 1; BYM = 2 int has_intercept; vector[K] xbar; - int trials[family == 4 ? N : 0]; // binomial trials (0 1d array if not applicable) - int y_int[is_continuous == 1 ? 0 : N]; // outcome - vector[is_continuous == 1 ? N : 0] y_real; // outcome - int link; + int trials[family == 4 ? N : 0]; + int y_int[is_continuous == 1 ? 0 : N]; + vector[is_continuous == 1 ? N : 0] y_real; + // pairwise difference version of CAR int E_n; // number of adjacency pairs int edges[E_n, 2]; // adjacency pairs + // matrix version of CAR + int order; + int Q_n[order == 2]; + vector[order == 2 ? Q_n[1] : 0] w; + int v[order == 2 ? Q_n[1] : 0]; + int u[order == 2 ? N+1 : 0]; + // prior stuff int prior_dist_rho; - real shape1_rho; // priors - real shape2_rho; // priors + real shape1_rho; + real shape2_rho; real scaling_factor; int prior_dist_for_intercept; int prior_dist; @@ -39,8 +47,8 @@ data { real prior_mean_tau; real prior_scale_tau; real prior_df_tau; - real global_prior_df; // for hs priors only - real global_prior_scale; // for hs priors only + real global_prior_df; + real global_prior_scale; int num_normals[prior_dist == 7 ? K : 0]; int prior_dist_for_aux; real prior_mean_for_aux; @@ -114,7 +122,10 @@ model { target += GammaReg(y_real, eta, aux, link, sum_log_y); } // prior on spatial parameter vector (GMRF) - target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); + if (order == 1) + target += -0.5 * dot_self(phi[edges[,1]] - phi[edges[,2]]); + else if (order == 2) + target+= -0.5 * dot_product(phi, csr_matrix_times_vector(N, N, w, v, u, phi)); // priors on coefficients #include "priors.stan" // model specific priors From a039e2ab4d1dff5c64ab852ae22e8fed81893ccc Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sat, 12 Aug 2017 21:54:46 -0400 Subject: [PATCH 25/59] Q should be squared if 'order == 2' --- R/stan_spatial.fit.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 697f78ea8..1afa0abdf 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -239,7 +239,7 @@ stan_spatial.fit <- function(x, y, w, standata$order <- order if (order == 2) { - Q <- diag(rowSums(W) - W) + Q <- diag(rowSums(W)) - W Q <- Q %*% Q sparse_stuff <- rstan::extract_sparse_parts(Q) standata$Q_n <- as.array(length(sparse_stuff$w), dim = 1) From 40b248bad7e3c5f18b765d5531c2bc8c8b853d68 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 13 Aug 2017 01:56:08 -0400 Subject: [PATCH 26/59] update stan_besag tests with inla comparisons --- R/datasets.R | 10 +- R/stan_besag.R | 2 +- R/stan_bym.R | 2 +- R/stan_spatial.fit.R | 13 +- data/lattice.rda | Bin 33425 -> 44073 bytes exec/spatial.stan | 33 +++- tests/testthat/test_stan_besag.R | 304 ++++++++++++++++++------------- 7 files changed, 225 insertions(+), 139 deletions(-) diff --git a/R/datasets.R b/R/datasets.R index f5309986c..8ed79646e 100644 --- a/R/datasets.R +++ b/R/datasets.R @@ -139,10 +139,12 @@ #' \item \code{educ} Years of education (head of household) #' } #' } -#' \item{\code{lattice}}{ The \code{grid_sim10} and \code{grid_sim30} -#' SpatialPolygonsDataFrame objects are a simulated lattice of 100 and 900 -#' spatial units, respectively. These objects contain spatially dependent -#' observations simulated as a Gaussian Markov Random Field (GMRF). +#' \item{\code{lattice}}{ The \code{grid_sim15} and \code{grid_sim30} +#' SpatialPolygonsDataFrame objects are a simulated lattice of 225 and 900 +#' spatial units, respectively. These objects contain spatially dependent +#' observations simulated as a Gaussian Markov Random Field (GMRF). The data +#' slot in \code{grid_sim15} contains simulated outcomes using the GMRF and +#' various supported likelihoods. #' #' Source: Simulated data #' diff --git a/R/stan_besag.R b/R/stan_besag.R index c57cacd47..8d3a8214a 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -73,7 +73,7 @@ #' data("lattice", package = "rstanarm") #' #' # plot GMRF -#' grid_sim <- grid_sim10 +#' grid_sim <- grid_sim15 #' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) #' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), #' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) diff --git a/R/stan_bym.R b/R/stan_bym.R index fd08a16d8..868da82b2 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -82,7 +82,7 @@ #' data("lattice", package = "rstanarm") #' #' # plot GMRF -#' grid_sim <- grid_sim10 +#' grid_sim <- grid_sim15 #' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) #' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), #' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 1afa0abdf..9c8bd2463 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -62,7 +62,6 @@ stan_spatial.fit <- function(x, y, w, is_continuous <- TRUE y_real <- y y_int <- array(0, dim = c(0)) - trials <- array(0, dim = c(0)) } else { is_continuous <- FALSE @@ -75,6 +74,9 @@ stan_spatial.fit <- function(x, y, w, else has_aux <- TRUE + if (family != "binomial") + trials <- array(0, dim = c(0)) + if (family$family %in% c("binomial", "poisson", "neg_binomial_2")) { if(!is.integer(y_int)) stop("Outcome must be an integer for count likelihoods.") @@ -256,6 +258,13 @@ stan_spatial.fit <- function(x, y, w, pars <- c(if (has_intercept) "alpha", "beta", if(model_type == 2) "rho", "tau", if(has_aux) "aux", "mean_PPD", "psi") + + switch_aux <- switch(family$family, + gaussian = "sigma", + poisson = NA, + neg_binomial_2 = "reciprocal_dispersion", + binomial = NA, + Gamma = "shape") prior_info <- summarize_spatial_prior( user_prior = prior_stuff, @@ -331,7 +340,7 @@ stan_spatial.fit <- function(x, y, w, } new_names <- c(if (has_intercept) "(Intercept)", colnames(xtemp), if(model_type == 2) "rho", "tau", - if(has_aux) "aux", "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") + if(has_aux) switch_aux, "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") stanfit@sim$fnames_oi <- new_names return(structure(stanfit, prior.info = prior_info)) diff --git a/data/lattice.rda b/data/lattice.rda index be66d26fb806eb13cec153eedbac27c4b4dcda53..fecb830cfb44df12c6b106cef295454ac091881a 100644 GIT binary patch literal 44073 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 K;Fh-=*8G2*6deTs diff --git a/exec/spatial.stan b/exec/spatial.stan index 3bbc65609..4d2e105b9 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -6,6 +6,37 @@ functions { #include "binomial_likelihoods.stan" #include "count_likelihoods.stan" #include "common_functions.stan" + /* + * Calculate lower bound on intercept + * + * @param family Integer family code + * @param link Integer link code + * @return real lower bound + */ + real make_lower(int family, int link) { + if (family == 1) return negative_infinity(); // Gaussian + if (family == 5) { // Gamma + if (link == 2) return negative_infinity(); // log + return 0; // identity or inverse + } + if (family == 2 || family == 3) { // Poisson or nb2 + if (link == 1) return negative_infinity(); // log + return 0.0; // identity or sqrt + } + return negative_infinity(); + } + + /* + * Calculate upper bound on intercept + * + * @param family Integer family code + * @param link Integer link code + * @return real upper bound + */ + real make_upper(int family, int link) { + if (family == 4 && link == 4) return 0.0; // binomial; log + return positive_infinity(); + } } data { int N; // number of regions @@ -65,7 +96,7 @@ transformed data { else hs = 0; } parameters { - real gamma[has_intercept]; // raw intercept + real gamma[has_intercept]; // raw intercept vector[K] z_beta; // standard normal term vector[model_type == 2? N : 0] theta_raw; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 6e28f7301..3f380a567 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -18,139 +18,183 @@ # tests can be run using devtools::test() or manually by loading testthat # package and then running the code below possibly with options(mc.cores = 4). -if (.Platform$OS.type != "windows" && require(betareg)) { - library(rstanarm) - SEED <- 12345 - set.seed(SEED) - ITER <- 100 - CHAINS <- 2 - - context("stan_besag") - - source(file.path("helpers", "expect_stanreg.R")) - source(file.path("helpers", "SW.R")) - - data("lattice10", package = "rstanarm") - - # Convert a spatial polygon to an N-by-N weight matrix - sp2weightmatrix <- function(spatialpolygon) { - spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) - } - W <- sp2weightmatrix(grid_sim) - x <- rnorm(nrow(W), 2, 1) - spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) - spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) - spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) - spatial_data$y_pois <- rpois(nrow(W), exp(-1 + 1.4 * x + spatial_data$phi)) - spatial_data$trials <- rep(10, nrow(W)) - spatial_data$y_binom <- rbinom(nrow(W), spatial_data$trials, binomial(link = "logit")$linkinv(1 + 0.4 * x + spatial_data$phi)) - - # test family/link combinations - test_that("family = 'gaussian' works", { - SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), +library(rstanarm) +SEED <- 12345 +set.seed(SEED) +ITER <- 50 +CHAINS <- 2 + +context("stan_besag") + +source(file.path("helpers", "expect_stanreg.R")) +source(file.path("helpers", "SW.R")) + +data("lattice", package = "rstanarm") + +# Convert a spatial polygon to an N-by-N weight matrix +sp2weightmatrix <- function(spatialpolygon) { + spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +} +W <- sp2weightmatrix(grid_sim15) +spatial_data <- grid_sim15@data + +SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), + W = W, iter = 100, chains = 4)) +SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = 100, chains = 4)) +SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, + family = poisson(link = "log"), + W = W, iter = 100, chains = 4)) +SW(fit_nb2 <- stan_besag(y_pois ~ 1 + x, data = spatial_data, + family = neg_binomial_2(link = "log"), + W = W, iter = 100, chains = 4)) +SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), + W = W, iter = 100, chains = 4)) + +# compare answers with INLA (NB2 reciprocal_dispersion param fails!) +test_that("stan_besag estimates match INLA", { + inla_gauss_est <- c(-0.0475, 0.4329, 0.9830, 0.8277) + inla_binom_est <- c(-1.9444, 0.3340, 0.423) + inla_pois_est <- c(0.7801, 0.4366, 0.3448) + inla_nb_est <- c(0.8053, 0.4362, 0.3574, 48.6003) + inla_gamma_est <- c(0.8119, -1.3407, 0.559, 1.106) + besag_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) + besag_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) + besag_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) + besag_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) + besag_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) + expect_equal(besag_gauss, inla_gauss_est, tol = 0.2) + expect_equal(besag_binom, inla_binom_est, tol = 0.2) + expect_equal(besag_pois, inla_pois_est, tol = 0.2) + expect_equal(besag_nb2, inla_nb_est, tol = 0.2) + expect_equal(besag_gamma, inla_gamma_est, tol = 0.2) +}) + +# test family/link combinations +test_that("family = 'gaussian' works", { + SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_inv <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), + SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gauss_inv <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_gauss_ident) + expect_stanreg(fit_gauss_log) + expect_stanreg(fit_gauss_inv) +}) +test_that("family = 'binomial' works", { + SW(fit_binom_logit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_gauss_ident) - expect_stanreg(fit_gauss_log) - expect_stanreg(fit_gauss_inv) - }) - test_that("family = 'binomial' works", { - SW(fit_binom_logit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_probit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "probit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cauchit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cauchit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_log <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cloglog <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cloglog"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_binom_logit) - expect_stanreg(fit_binom_probit) - expect_stanreg(fit_binom_cauchit) - expect_stanreg(fit_binom_log) - expect_stanreg(fit_binom_cloglog) - - }) - test_that("family = 'poisson' works", { - SW(fit_pois_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), + SW(fit_binom_probit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "probit"), W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_pois_log) - expect_stanreg(fit_pois_ident) - expect_stanreg(fit_pois_sqrt) - }) - - # test QR - test_that("QR errors when number of predictors is <= 1", { - expect_error( - stan_besag(y_gauss ~ x, data = spatial_data, family = gaussian(), seed = SEED, QR = TRUE), - "'QR' can only be specified when there are multiple predictors" - ) - }) - - test_that("QR works when number of x and/or z predictors is >= 1", { - SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - expect_stanreg(fit_besag) - }) + SW(fit_binom_cauchit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cauchit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_log <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_cloglog <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cloglog"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_binom_logit) + expect_stanreg(fit_binom_probit) + expect_stanreg(fit_binom_cauchit) + expect_stanreg(fit_binom_log) + expect_stanreg(fit_binom_cloglog) - test_that("stan_besag works with QR = TRUE and algorithm = 'optimizing'", { +}) +test_that("family = 'poisson' works", { + SW(fit_pois_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_pois_log) + expect_stanreg(fit_pois_ident) + expect_stanreg(fit_pois_sqrt) +}) - }) - - test_that("loo/waic for stan_besag works", { - SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, - family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - loo(fit_gauss) - loo(fit_binom) - loo(fit_pois) - }) - - test_that("posterior_predict works for stan_besag", { - SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), +# the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links +test_that("family = 'neg_binomial_2' works", { + SW(fit_nb2_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_nb2_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_nb2_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_nb2_log) + expect_stanreg(fit_nb2_ident) + expect_stanreg(fit_nb2_sqrt) +}) + +test_that("family = 'Gamma' works", { + SW(fit_gamma_log <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, - family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - preds_gauss <- posterior_predict(fit_gauss) - preds_binom <- posterior_predict(fit_binom) - preds_pois <- posterior_predict(fit_pois) - }) - - test_that("predict works for stan_besag", { - SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - pred_besag <- predict(fit_besag) - pred_new_besag <- predict(fit_besag, newdata = data.frame(x = rnorm(100, 2, 1))) - }) - - test_that("predict errors if nrow(newdata) < number of spatial regions", { - SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - pred_besag <- predict(fit_besag) - expect_error(pred_new_besag <- predict(fit_besag, newdata = data.frame(x = rnorm(10, 2, 1))), - "'newdata' is less than the number of spatial regions.") - }) - -} \ No newline at end of file + SW(fit_gamma_ident <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gamma_sqrt <- stan_besag(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_gamma_log) + expect_stanreg(fit_gamma_ident) + expect_stanreg(fit_gamma_sqrt) +}) + +# test QR +test_that("QR errors when number of predictors is <= 1", { + expect_error( + stan_besag(y_gauss ~ x, data = spatial_data, family = gaussian(), seed = SEED, QR = TRUE), + "'QR' can only be specified when there are multiple predictors" + ) +}) + +test_that("QR works when number of x predictors is > 1", { + SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + expect_stanreg(fit_besag) +}) + +test_that("stan_besag errors with algorithm = 'optimizing'", { + expect_error(stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, algorithm = "optimizing"), + "'arg' should be one of “sampling”, “meanfield”, “fullrank”") +}) + +test_that("loo/waic for stan_besag works", { + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + loo(fit_nb2) + loo(fit_gamma) +}) + +test_that("posterior_predict works for stan_besag", { + preds_gauss <- posterior_predict(fit_gauss) + preds_binom <- posterior_predict(fit_binom) + preds_pois <- posterior_predict(fit_pois) + preds_nb2 <- posterior_predict(fit_nb2) + preds_gamma <- posterior_predict(fit_gamma) +}) + +test_that("predict works for stan_besag", { + new_dat <- data.frame(x = rnorm(nrow(W), 2, 1)) + predict(fit_gauss) + predict(fit_binom) + predict(fit_pois) + predict(fit_nb2) + predict(fit_gamma) + predict(fit_gauss, newdata = new_dat) + predict(fit_binom, newdata = new_dat) + predict(fit_pois, newdata = new_dat) + predict(fit_nb2, newdata = new_dat) + predict(fit_gamma, newdata = new_dat) +}) + +test_that("predict errors if nrow(newdata) < number of spatial regions", { + expect_error(predict(fit_gauss, newdata = data.frame(x = rnorm(10, 2, 1))), + "'newdata' is less than the number of spatial regions.") +}) + From b846069d85f41cf3f720a5885ee7ddf11ec1fc40 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 13 Aug 2017 02:26:08 -0400 Subject: [PATCH 27/59] changing stan_bym to stan_bym2 (INLA convention) --- NAMESPACE | 2 +- R/{stan_bym.R => stan_bym2.R} | 14 +++++++------- R/stan_spatial.fit.R | 10 +++++----- tests/testthat/test_stan_besag.R | 15 ++++++++++----- 4 files changed, 23 insertions(+), 18 deletions(-) rename R/{stan_bym.R => stan_bym2.R} (95%) diff --git a/NAMESPACE b/NAMESPACE index 822a103a2..7bb6ead47 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -103,7 +103,7 @@ export(stan_betareg) export(stan_betareg.fit) export(stan_biglm) export(stan_biglm.fit) -export(stan_bym) +export(stan_bym2) export(stan_gamm4) export(stan_glm) export(stan_glm.fit) diff --git a/R/stan_bym.R b/R/stan_bym2.R similarity index 95% rename from R/stan_bym.R rename to R/stan_bym2.R index 868da82b2..03fa3f8f9 100644 --- a/R/stan_bym.R +++ b/R/stan_bym2.R @@ -21,7 +21,7 @@ #' #' @export #' -#' @templateVar fun stan_bym +#' @templateVar fun stan_bym2 #' @templateVar fitfun stan_spatial.fit #' @templateVar pkg rstanarm #' @templateVar pkgfun stan_glm @@ -53,16 +53,16 @@ #' @param order Order of the spatial random walk. Specifying \code{order = 2} #' will smooth the spatial variation. The default is \code{order = 1}. #' -#' @details The \code{stan_bym} model is similar to the BYM2 model in R-INLA. +#' @details The \code{stan_bym2} model is similar to the BYM2 model in R-INLA. #' However, instead of using the integrated nested Laplace approximation #' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} #' is \code{"sampling"}) via MCMC. The model includes priors on the intercept, #' regression coefficients, spatial mixing parameter, overall spatial -#' variation, and any applicable auxiliary parameters. The \code{stan_bym} +#' variation, and any applicable auxiliary parameters. The \code{stan_bym2} #' function calls the workhorse \code{stan_spatial.fit} function, but it is #' also possible to call the latter directly. #' -#' @seealso The vignette for \code{stan_bym}. +#' @seealso The vignette for \code{stan_bym2}. #' #' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An #' intuitive Bayesian spatial model for disease mapping that accounts for @@ -102,9 +102,9 @@ #' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) #' #' # fit the model -#' fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' fit_bym <- stan_bym2(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) #' pp_check(fit_besag) -stan_bym <- function(formula, +stan_bym2 <- function(formula, family = gaussian(), data, trials = NULL, @@ -117,7 +117,7 @@ stan_bym <- function(formula, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { - stan_function <- "stan_bym" + stan_function <- "stan_bym2" if (!requireNamespace("INLA", quietly = TRUE)) stop(paste("Please install the INLA package before using", stan_function)) mc <- match.call(expand.dots = FALSE) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 9c8bd2463..70baa6fab 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -17,7 +17,7 @@ #' Workhorse function for CAR models. #' -#' Both \code{stan_besag} and \code{stan_bym} call \code{stan_spatial.fit} to +#' Both \code{stan_besag} and \code{stan_bym2} call \code{stan_spatial.fit} to #' fit the appropriate spatial model. See the documentation for either modeling #' function for further details on the arguments of \code{stan_spatial.fit}. #' @@ -25,7 +25,7 @@ #' stan_spatial.fit <- function(x, y, w, - stan_function = c("stan_besag", "stan_bym"), + stan_function = c("stan_besag", "stan_bym2"), family = NULL, trials = NULL, order = c(1,2), @@ -86,7 +86,7 @@ stan_spatial.fit <- function(x, y, w, if (stan_function == "stan_besag") model_type <- 1 - else if (stan_function == "stan_bym") + else if (stan_function == "stan_bym2") model_type <- 2 if (!(order %in% c(1,2))) @@ -126,7 +126,7 @@ stan_spatial.fit <- function(x, y, w, assign(i, prior_tau_stuff[[i]]) # Deal with prior_rho - if (stan_function == "stan_bym") { + if (stan_function == "stan_bym2") { has_rho <- 1 if (is.null(prior_rho)) { prior_dist_for_rho <- 0 @@ -234,7 +234,7 @@ stan_spatial.fit <- function(x, y, w, num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0), prior_dist_rho = prior_dist_for_rho) - if (stan_function == "stan_bym") + if (stan_function == "stan_bym2") standata$scaling_factor <- create_scaling_factor(standata) else standata$scaling_factor <- 0 diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 3f380a567..51588ae2c 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -38,19 +38,24 @@ sp2weightmatrix <- function(spatialpolygon) { W <- sp2weightmatrix(grid_sim15) spatial_data <- grid_sim15@data -SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), +SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), W = W, iter = 100, chains = 4)) SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), family = binomial(link = "logit"), W = W, iter = 100, chains = 4)) SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), family = poisson(link = "log"), W = W, iter = 100, chains = 4)) SW(fit_nb2 <- stan_besag(y_pois ~ 1 + x, data = spatial_data, - family = neg_binomial_2(link = "log"), - W = W, iter = 100, chains = 4)) + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + family = neg_binomial_2(link = "log"), + W = W, iter = 100, chains = 4)) SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), - W = W, iter = 100, chains = 4)) + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + W = W, iter = 100, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) test_that("stan_besag estimates match INLA", { @@ -73,7 +78,7 @@ test_that("stan_besag estimates match INLA", { # test family/link combinations test_that("family = 'gaussian' works", { - SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), + SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), W = W, iter = ITER, chains = CHAINS)) SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), W = W, iter = ITER, chains = CHAINS)) From 9aafe0be1e1ac6c982d6e3bc89038b1e1b48271b Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 13 Aug 2017 21:08:45 -0400 Subject: [PATCH 28/59] adding BYM model; changing spatial parameter names --- NAMESPACE | 1 + R/stan_bym.R | 153 +++++++++++++++++++++++++++++++++++++++++++ R/stan_bym2.R | 5 +- R/stan_spatial.fit.R | 60 ++++++++++++----- exec/spatial.stan | 26 ++++++-- 5 files changed, 222 insertions(+), 23 deletions(-) create mode 100644 R/stan_bym.R diff --git a/NAMESPACE b/NAMESPACE index 7bb6ead47..c4eeea96e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -103,6 +103,7 @@ export(stan_betareg) export(stan_betareg.fit) export(stan_biglm) export(stan_biglm.fit) +export(stan_bym) export(stan_bym2) export(stan_gamm4) export(stan_glm) diff --git a/R/stan_bym.R b/R/stan_bym.R new file mode 100644 index 000000000..f7eca5df5 --- /dev/null +++ b/R/stan_bym.R @@ -0,0 +1,153 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2013, 2014, 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#' Bayesian spatial CAR BYM models via Stan +#' +#' Spatial regression modeling with a variant of the Besag, York, Mollie (BYM) +#' conditional autoregressive (CAR) prior. +#' +#' @export +#' +#' @templateVar fun stan_bym +#' @templateVar fitfun stan_spatial.fit +#' @templateVar pkg rstanarm +#' @templateVar pkgfun stan_glm +#' @templateVar sameargs family +#' @template return-stanreg-object +#' @template return-stanfit-object +#' @template args-formula-data-subset +#' @template args-same-as +#' @template args-x-y +#' @template args-dots +#' @template args-prior_intercept +#' @template args-priors +#' @template args-prior_PD +#' @template args-algorithm +#' @template args-adapt_delta +#' @template args-QR +#' +#' @param trials If \code{family = binomial()} then a vector of trials (equal in +#' length to the outcome) must be declared. +#' @param W An N-by-N spatial weight matrix. +#' @param prior_tau The prior on the marginal variance contribution of the +#' unstructured (random) effect. +#' @param prior_rho The prior on the marginal variance contribution of the +#' structured (spatial) effect. +#' @param order Order of the spatial random walk. Specifying \code{order = 2} +#' will smooth the spatial variation. The default is \code{order = 1}. +#' +#' @details The \code{stan_bym} model is similar to the BYM model in R-INLA. +#' However, instead of using the integrated nested Laplace approximation +#' (INLA) method, full Bayesian estimation is performed (if \code{algorithm} +#' is \code{"sampling"}) via MCMC. The model includes priors on the intercept, +#' regression coefficients, spatial mixing parameter, overall spatial +#' variation, and any applicable auxiliary parameters. The \code{stan_bym} +#' function calls the workhorse \code{stan_spatial.fit} function, but it is +#' also possible to call the latter directly. +#' +#' @seealso The vignette for \code{stan_bym}. +#' +#' @references Riebler, A., Sorbye, S.H., Simpson, D., Rue, H. (2016). An +#' intuitive Bayesian spatial model for disease mapping that accounts for +#' scaling. arXiv preprint arXiv:1601.01180. +#' +#' Besag, J., York, J. and Mollié, A. (1991). Bayesian image restoration, with +#' two applications in spatial statistics. Annals of the Institute of +#' Statistical Mathematics. Vol. 43, No. 01, p1-20. +#' +#' @examples +#' ### Simulated Data on a Lattice +#' +#' data("lattice", package = "rstanarm") +#' +#' # plot GMRF +#' grid_sim <- grid_sim15 +#' var_range_gmrf <- seq(min(grid_sim@data$gmrf), max(grid_sim@data$gmrf), length = 50) +#' spplot(grid_sim, "gmrf", at = var_range_gmrf, main = expression(paste(phi, " (GMRF)")), +#' col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(50)) +#' +#' # Convert a spatial polygon to an N-by-N weight matrix +#' sp2weightmatrix <- function(spatialpolygon) { +#' spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +#' } +#' +#' # convert spatial object to neighborhood matrix +#' W <- sp2weightmatrix(grid_sim) +#' # W_sparse <- Matrix(W, sparse = TRUE, dimnames = list(NULL,NULL)) +#' +#' # simulate predictor/outcome +#' x <- rnorm(nrow(W), 3, 1) +#' spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) +#' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) +#' +#' # fit the model +#' fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' pp_check(fit_besag) +stan_bym <- function(formula, + family = gaussian(), + data, + trials = NULL, + W, + order = 1, + ..., + prior = normal(), prior_intercept = normal(), + prior_tau = normal(), prior_rho = normal(), prior_aux = NULL, + prior_PD = FALSE, + algorithm = c("sampling", "meanfield", "fullrank"), + adapt_delta = NULL, + QR = FALSE) { + stan_function <- "stan_bym" + if (!requireNamespace("INLA", quietly = TRUE)) + stop(paste("Please install the INLA package before using", stan_function)) + mc <- match.call(expand.dots = FALSE) + algorithm <- match.arg(algorithm) + family <- validate_family(family) + mf <- model.frame(mc, data) + mt <- terms(formula, data = data) + Y <- array1D_check(model.response(mf, type = "any")) + X <- model.matrix(formula, data) + + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, + trials = trials, + family = family, + stan_function = stan_function, + order = order, + ..., + prior = prior, + prior_intercept = prior_intercept, + prior_aux = prior_aux, prior_rho = prior_rho, prior_tau = prior_tau, + prior_PD = prior_PD, + algorithm = algorithm, adapt_delta = adapt_delta, + QR = QR) + fit <- nlist(stanfit, + algorithm, + data, + x = X, y = Y, + family, + formula, + model = mf, + terms = mt, + call = match.call(), + stan_function = stan_function) + + if (family$family == "binomial") { + fit$family <- binomial(link = "logit") + fit$trials <- trials + } + out <- stanreg(fit) + structure(out, class = c("stanreg", "car")) +} diff --git a/R/stan_bym2.R b/R/stan_bym2.R index 03fa3f8f9..91c836cd0 100644 --- a/R/stan_bym2.R +++ b/R/stan_bym2.R @@ -15,9 +15,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -#' Bayesian spatial CAR BYM models via Stan +#' Bayesian spatial CAR BYM variant models via Stan #' -#' Spatial regression modeling with a variant of the Besag, York, Mollie (BYM) conditional autoregressive (CAR) prior. +#' Spatial regression modeling with a variant of the Besag, York, Mollie (BYM) +#' conditional autoregressive (CAR) prior that accounts for scaling. #' #' @export #' diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 70baa6fab..99f464780 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -74,7 +74,7 @@ stan_spatial.fit <- function(x, y, w, else has_aux <- TRUE - if (family != "binomial") + if (family$family != "binomial") trials <- array(0, dim = c(0)) if (family$family %in% c("binomial", "poisson", "neg_binomial_2")) { @@ -86,8 +86,10 @@ stan_spatial.fit <- function(x, y, w, if (stan_function == "stan_besag") model_type <- 1 - else if (stan_function == "stan_bym2") + else if (stan_function == "stan_bym") model_type <- 2 + else if (stan_function == "stan_bym2") + model_type <- 3 if (!(order %in% c(1,2))) stop("Argument 'order' must be 1 or 2.") @@ -138,22 +140,44 @@ stan_spatial.fit <- function(x, y, w, prior_dist_for_rho <- 1 prior_dist_name_for_rho <- "beta" } - prior_rho_stuff <- list(prior_dist_name_for_rho = prior_dist_name_for_rho, - shape1 = prior_rho$alpha, - shape2 = prior_rho$beta, - prior_mean_for_rho = 0, - prior_scale_for_rho = 0, - prior_df_for_rho = 0) + prior_rho_stuff <- handle_glm_prior(NULL, nvars = 1, family$link, default_scale = 1, + ok_dists = ok_scale_dists) + names(prior_rho_stuff) <- paste0(names(prior_rho_stuff), + "_for_rho") + for (i in names(prior_rho_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_rho_stuff[[i]]) + prior_rho_stuff$shape1 <- prior_rho$alpha + prior_rho_stuff$shape2 <- prior_rho$beta } else if (stan_function == "stan_besag") { has_rho <- 0 prior_dist_for_rho <- 0 - prior_rho_stuff <- list(prior_dist_name_for_rho = NA) - prior_scale_for_rho <- 0 + # prior_rho_stuff <- list(prior_dist_name_for_rho = NA) + # prior_scale_for_rho <- 0 + # prior_rho_stuff$shape1 <- 0 + # prior_rho_stuff$shape2 <- 0 + prior_rho_stuff <- handle_glm_prior(NULL, nvars = 1, family$link, default_scale = 1, + ok_dists = ok_scale_dists) + names(prior_rho_stuff) <- paste0(names(prior_rho_stuff), + "_for_rho") + for (i in names(prior_rho_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_rho_stuff[[i]]) prior_rho_stuff$shape1 <- 0 prior_rho_stuff$shape2 <- 0 } - + else if (stan_function == "stan_bym") { + has_rho <- 1 + prior_rho_stuff <- handle_glm_prior(prior_rho, nvars = 1, family$link, default_scale = 1, + ok_dists = ok_scale_dists) + names(prior_rho_stuff) <- paste0(names(prior_rho_stuff), + "_for_rho") + for (i in names(prior_rho_stuff)) # prior_{dist, mean, scale, df, autoscale} + assign(i, prior_rho_stuff[[i]]) + prior_rho_stuff$shape1 <- 0 + prior_rho_stuff$shape2 <- 0 + } + + # deal with auxiliary parameter if (has_aux) { prior_aux_stuff <- handle_glm_prior(prior_aux, nvars = 1, family$link, default_scale = 1, ok_dists = ok_dists) @@ -211,6 +235,7 @@ stan_spatial.fit <- function(x, y, w, shape2_rho = c(prior_rho_stuff$shape2), prior_dist_for_intercept = prior_dist_for_intercept, prior_dist = prior_dist, + prior_dist_rho = prior_dist_for_rho, prior_dist_tau = prior_dist_for_tau, prior_dist_for_aux = prior_dist_for_aux, prior_mean_for_intercept = c(prior_mean_for_intercept), @@ -219,6 +244,9 @@ stan_spatial.fit <- function(x, y, w, prior_mean = as.array(prior_mean), prior_scale = as.array(prior_scale), prior_df = as.array(prior_df), + prior_mean_rho = c(prior_mean_for_rho), + prior_scale_rho = c(prior_scale_for_rho), + prior_df_rho = c(prior_df_for_rho), prior_mean_tau = c(prior_mean_for_tau), prior_scale_tau = c(prior_scale_for_tau), prior_df_tau = c(prior_df_for_tau), @@ -231,8 +259,7 @@ stan_spatial.fit <- function(x, y, w, global_prior_df_for_intercept, global_prior_scale, global_prior_scale_for_intercept, - num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0), - prior_dist_rho = prior_dist_for_rho) + num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0)) if (stan_function == "stan_bym2") standata$scaling_factor <- create_scaling_factor(standata) @@ -256,7 +283,7 @@ stan_spatial.fit <- function(x, y, w, standata$u <- array(0, dim = c(0)) } - pars <- c(if (has_intercept) "alpha", "beta", if(model_type == 2) "rho", "tau", if(has_aux) "aux", + pars <- c(if (has_intercept) "alpha", "beta", if(model_type != 1) "rho", "tau", if(has_aux) "aux", "mean_PPD", "psi") switch_aux <- switch(family$family, @@ -339,7 +366,10 @@ stan_spatial.fit <- function(x, y, w, } } new_names <- c(if (has_intercept) "(Intercept)", - colnames(xtemp), if(model_type == 2) "rho", "tau", + colnames(xtemp), + if(model_type == 1) {"structured"}, # tau + if(model_type == 2) {c("structured", "unstructured")}, # rho, tau + if(model_type == 3) {c("mixing", "structured")}, # rho, tau if(has_aux) switch_aux, "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") stanfit@sim$fnames_oi <- new_names diff --git a/exec/spatial.stan b/exec/spatial.stan index 4d2e105b9..ea4678ca1 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -46,7 +46,7 @@ data { int link; int is_continuous; int has_aux; - int model_type; // 0 = 1D RW; Besag = 1; BYM = 2 + int model_type; // 0 = 1D RW; Besag = 1; BYM = 2 int has_intercept; vector[K] xbar; int trials[family == 4 ? N : 0]; @@ -63,6 +63,9 @@ data { int u[order == 2 ? N+1 : 0]; // prior stuff int prior_dist_rho; + real prior_mean_rho; + real prior_scale_rho; + real prior_df_rho; real shape1_rho; real shape2_rho; real scaling_factor; @@ -98,9 +101,9 @@ transformed data { parameters { real gamma[has_intercept]; // raw intercept vector[K] z_beta; // standard normal term - vector[model_type == 2? N : 0] theta_raw; // used for random effect (non-spatial) + vector[model_type == 1? 0 : N] theta_raw; // used for random effect (non-spatial) vector[N-1] phi_raw; // used for random effect (spatial) - real rho[model_type == 2]; // variance i.e. rho^2 + real rho[model_type != 1]; // variance i.e. rho^2 real tau; // variance i.e. tau^2 real global[hs]; vector[K] local[hs]; @@ -121,7 +124,9 @@ transformed parameters { if (model_type == 1) psi = phi * sqrt(inv(tau)); else if (model_type == 2) - psi = tau*(sqrt(1-rho[1])*theta_raw[1] + sqrt(rho[1]/scaling_factor)*phi); + psi = phi * sqrt(inv(rho[1])) + theta_raw * sqrt(inv(tau)); + else if (model_type == 3) + psi = tau*(sqrt(1-rho[1])*theta_raw + sqrt(rho[1]/scaling_factor)*phi); // for regression coefficients #include "tparameters.stan" } @@ -160,8 +165,17 @@ model { // priors on coefficients #include "priors.stan" // model specific priors - if (model_type == 2) { // BYM - target+= normal_lpdf(theta_raw[1] | 0, 1); // unstructured (random) effect + if (model_type == 2) { + // prior on overall spatial variation + if (prior_dist_rho == 1) + target+= normal_lpdf(rho | prior_mean_rho, prior_scale_rho); + else if (prior_dist_rho == 2) + target+= student_t_lpdf(rho | prior_df_rho, prior_mean_rho, prior_scale_rho); + else if (prior_dist_rho == 3) + target+= exponential_lpdf(rho | prior_scale_rho); + } + else if (model_type == 3) { // BYM + target+= normal_lpdf(theta_raw | 0, 1); // unstructured (random) effect if (prior_dist_rho == 1) target+= beta_lpdf(rho[1] | shape1_rho, shape2_rho); /* else prior_dist_tau is 0 and nothing is added */ From 3582ca6b148a5a37fa1b33b0f4fdf9539592031d Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 14 Aug 2017 13:56:50 -0400 Subject: [PATCH 29/59] change parameterization in spatial.stan from prec to sd --- R/stan_besag.R | 9 ++++++--- R/stan_bym.R | 12 +++++++++--- R/stan_bym2.R | 12 +++++++++--- R/stan_spatial.fit.R | 1 - exec/spatial.stan | 24 +++++++++++++++++------- tests/testthat/test_stan_besag.R | 9 +++++---- 6 files changed, 46 insertions(+), 21 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 8d3a8214a..23e800b31 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -89,11 +89,14 @@ #' #' # simulate predictor/outcome #' x <- rnorm(nrow(W), 3, 1) -#' spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) -#' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) +#' phi <- grid_sim@data$gmrf +#' tau <- 1 +#' y <- rnorm(nrow(W), 0 + 0.4*x + phi*tau, 1) #' #' # fit the model -#' fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = data.frame(y=y,x=x), +#' W = W, iter = 300, chains = 4) +#' fit_besag #' pp_check(fit_besag) #' stan_besag <- function(formula, diff --git a/R/stan_bym.R b/R/stan_bym.R index f7eca5df5..923bd9083 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -91,11 +91,17 @@ #' #' # simulate predictor/outcome #' x <- rnorm(nrow(W), 3, 1) -#' spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) -#' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) +#' phi <- grid_sim@data$gmrf +#' theta <- rnorm(nrow(W), 0, 1) +#' tau <- 1 +#' rho <- 1 +#' spatial_data <- data.frame(x) +#' y <- rnorm(nrow(W), 0 + 0.4*x + phi*rho + theta*tau, 1) #' #' # fit the model -#' fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' fit_bym <- stan_bym(y ~ 1 + x +, data = data.frame(y=y,x=x), +#' W = W, iter = 300, chains = 4) +#' fit_bym #' pp_check(fit_besag) stan_bym <- function(formula, family = gaussian(), diff --git a/R/stan_bym2.R b/R/stan_bym2.R index 91c836cd0..bb844195b 100644 --- a/R/stan_bym2.R +++ b/R/stan_bym2.R @@ -99,11 +99,17 @@ #' #' # simulate predictor/outcome #' x <- rnorm(nrow(W), 3, 1) -#' spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) -#' spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) +#' phi <- grid_sim@data$gmrf +#' theta <- rnorm(nrow(W), 0, 1) +#' tau <- 1 +#' rho <- 0.7 +#' psi <- (1/tau) * (sqrt(1-rho)*theta + sqrt(rho)*phi) +#' y <- rnorm(nrow(W), 0 + 0.4 * x + psi, 1) #' #' # fit the model -#' fit_bym <- stan_bym2(y_gauss ~ 1 + x + I(x^2), data = spatial_data, W = W, iter = 300, chains = 4) +#' fit_bym2 <- stan_bym2(y ~ 1 + x, data = data.frame(y=y,x=x), +#' W = W, iter = 300, chains = 4) +#' fit_bym2 #' pp_check(fit_besag) stan_bym2 <- function(formula, family = gaussian(), diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 99f464780..75bed8206 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -371,7 +371,6 @@ stan_spatial.fit <- function(x, y, w, if(model_type == 2) {c("structured", "unstructured")}, # rho, tau if(model_type == 3) {c("mixing", "structured")}, # rho, tau if(has_aux) switch_aux, "mean_PPD", paste0("psi[", 1:standata$N, "]"), "log-posterior") - stanfit@sim$fnames_oi <- new_names return(structure(stanfit, prior.info = prior_info)) } diff --git a/exec/spatial.stan b/exec/spatial.stan index ea4678ca1..7bd51ccfa 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -46,7 +46,7 @@ data { int link; int is_continuous; int has_aux; - int model_type; // 0 = 1D RW; Besag = 1; BYM = 2 + int model_type; // Besag = 0; BYM = 1; BYM = 2 int has_intercept; vector[K] xbar; int trials[family == 4 ? N : 0]; @@ -99,12 +99,13 @@ transformed data { else hs = 0; } parameters { - real gamma[has_intercept]; // raw intercept - vector[K] z_beta; // standard normal term - vector[model_type == 1? 0 : N] theta_raw; // used for random effect (non-spatial) - vector[N-1] phi_raw; // used for random effect (spatial) - real rho[model_type != 1]; // variance i.e. rho^2 - real tau; // variance i.e. tau^2 + real gamma[has_intercept]; + vector[K] z_beta; + vector[model_type == 1? 0 : N] theta_raw; + vector[N-1] phi_raw; + // interpretation of rho and tau depends on model_type! + real rho[model_type != 1]; + real tau; real global[hs]; vector[K] local[hs]; vector[K] mix[prior_dist == 5 || prior_dist == 6]; @@ -121,12 +122,20 @@ transformed parameters { vector[N] psi; phi[1:(N - 1)] = phi_raw; phi[N] = -sum(phi_raw); + /* if (model_type == 1) psi = phi * sqrt(inv(tau)); else if (model_type == 2) psi = phi * sqrt(inv(rho[1])) + theta_raw * sqrt(inv(tau)); else if (model_type == 3) psi = tau*(sqrt(1-rho[1])*theta_raw + sqrt(rho[1]/scaling_factor)*phi); + */ + if (model_type == 1) + psi = phi * tau; + else if (model_type == 2) + psi = phi * rho[1] + theta_raw * tau; + else if (model_type == 3) + psi = tau*(sqrt(1-rho[1])*theta_raw + sqrt(rho[1]/scaling_factor)*phi); // for regression coefficients #include "tparameters.stan" } @@ -173,6 +182,7 @@ model { target+= student_t_lpdf(rho | prior_df_rho, prior_mean_rho, prior_scale_rho); else if (prior_dist_rho == 3) target+= exponential_lpdf(rho | prior_scale_rho); + /* else prior_dist_tau is 0 and nothing is added */ } else if (model_type == 3) { // BYM target+= normal_lpdf(theta_raw | 0, 1); // unstructured (random) effect diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 51588ae2c..5cd1a5106 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -25,7 +25,8 @@ ITER <- 50 CHAINS <- 2 context("stan_besag") - +# source(paste0("tests/testthat/",(file.path("helpers", "expect_stanreg.R")))) +# source(paste0("tests/testthat/",(file.path("helpers", "SW.R")))) source(file.path("helpers", "expect_stanreg.R")) source(file.path("helpers", "SW.R")) @@ -48,14 +49,14 @@ SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = poisson(link = "log"), - W = W, iter = 100, chains = 4)) + W = W, iter = 500, chains = 4)) SW(fit_nb2 <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), family = neg_binomial_2(link = "log"), - W = W, iter = 100, chains = 4)) + W = W, iter = 500, chains = 4)) SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = W, iter = 100, chains = 4)) + W = W, iter = 500, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) test_that("stan_besag estimates match INLA", { From 9cc2a37e69abb2a4e533e198257264a581921cd9 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 14 Aug 2017 16:14:02 -0400 Subject: [PATCH 30/59] convert spatial weight matrix to sparse if necessary --- R/stan_spatial.fit.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 75bed8206..4a03f18c2 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -37,6 +37,8 @@ stan_spatial.fit <- function(x, y, w, adapt_delta = NULL, QR = FALSE) { # convert W to a sparse matrix if not already sparse. + if(!is(w, "sparseMatrix")) + w <- Matrix(w, sparse = TRUE) algorithm <- match.arg(algorithm) From 87ec6a964643d1cf0a0680b4a78222415d6c5f7f Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 15 Aug 2017 02:24:25 -0400 Subject: [PATCH 31/59] prior must be on theta_raw when model_type = 2 --- R/stan_spatial.fit.R | 12 +++++++- exec/spatial.stan | 11 ++++---- vignettes/spatial.Rmd | 65 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 69 insertions(+), 19 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 4a03f18c2..65e62fa9f 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -60,6 +60,16 @@ stan_spatial.fit <- function(x, y, w, binomial = 4, Gamma = 5) + # for when consistent-family-numbers gets merged + # family_num <- switch(family$family, + # gaussian = 1, + # Gamma = 2, + # inv_gaussian = 3, + # beta = 4, + # binomial = 5, + # poisson = 6, + # neg_binomial_2 = 7) + if (family$family %in% c("gaussian", "Gamma")) { is_continuous <- TRUE y_real <- y @@ -392,7 +402,7 @@ create_scaling_factor <- function(dat) { # Compute the diagonal elements of the covariance matrix subject to the # constraint that the entries of the ICAR sum to zero. # See the function help for further details. - Q_inv <- inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) + Q_inv <- INLA::inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) # Compute the geometric mean of the variances, which are on the diagonal of Q.inv scaling_factor <- exp(mean(log(Matrix::diag(Q_inv)))) diff --git a/exec/spatial.stan b/exec/spatial.stan index 7bd51ccfa..116d1c5ed 100644 --- a/exec/spatial.stan +++ b/exec/spatial.stan @@ -46,7 +46,7 @@ data { int link; int is_continuous; int has_aux; - int model_type; // Besag = 0; BYM = 1; BYM = 2 + int model_type; // Besag = 1; BYM = 2; BYM2 = 3 int has_intercept; vector[K] xbar; int trials[family == 4 ? N : 0]; @@ -122,7 +122,7 @@ transformed parameters { vector[N] psi; phi[1:(N - 1)] = phi_raw; phi[N] = -sum(phi_raw); - /* + /* precision form if (model_type == 1) psi = phi * sqrt(inv(tau)); else if (model_type == 2) @@ -175,13 +175,14 @@ model { #include "priors.stan" // model specific priors if (model_type == 2) { + target+= normal_lpdf(theta_raw | 0, 1); // unstructured (random) effect // prior on overall spatial variation if (prior_dist_rho == 1) - target+= normal_lpdf(rho | prior_mean_rho, prior_scale_rho); + target+= normal_lpdf(rho[1] | prior_mean_rho, prior_scale_rho); else if (prior_dist_rho == 2) - target+= student_t_lpdf(rho | prior_df_rho, prior_mean_rho, prior_scale_rho); + target+= student_t_lpdf(rho[1] | prior_df_rho, prior_mean_rho, prior_scale_rho); else if (prior_dist_rho == 3) - target+= exponential_lpdf(rho | prior_scale_rho); + target+= exponential_lpdf(rho[1] | prior_scale_rho); /* else prior_dist_tau is 0 and nothing is added */ } else if (model_type == 3) { // BYM diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index 5d758597d..46e21909f 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -60,7 +60,7 @@ Unfortunately there is no guarantee that $\mathbf{W}$ is positive definite so $\ ## Besag (ICAR) Spatial Prior -The `stan_besag` function fits the data to an ICAR model. This means that the spatial effect enters the linear predictor as +The `stan_besag` modeling function fits the data to an ICAR model. This means that the spatial effect enters the linear predictor as $$ \begin{align} \boldsymbol{\psi} = \boldsymbol{\phi} \\ @@ -71,19 +71,35 @@ $$ where $\rho$ is a scalar that controls the overall spatial variation and has an appropriate hyperprior distribution. -## Variant of the BYM Spatial Prior +## BYM -The `stan_bym` model fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and thex unstructured (random) effect, +The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which results in misleading parameter estimates and invalid inferences. The BYM model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial component takes the following form, $$ \begin{align} -\boldsymbol{\psi} &= \tau(\boldsymbol{\theta}\sqrt{1-\rho} + \boldsymbol{\phi}\sqrt{\rho}) \\ +\boldsymbol{\psi} &= \rho\phi + \tau\theta \\ f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\mathbf{Q}|^{1/2} \exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\mathbf{Q}\boldsymbol{\phi} \bigg) \\ -f(\theta_i) &= (2\pi\sigma^2)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} +f(\theta_i) &= (2\pi)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} \end{align} $$ Note that the unstructured effect $\boldsymbol{\theta}$ is distributed standard normal. +## BYM2 (Variant of the BYM Spatial Prior) + +The `stan_bym2` modeling function fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and thex unstructured (random) effect, +$$ +\begin{align} +\boldsymbol{\psi} &= \tau(\boldsymbol{\theta}\sqrt{1-\rho} + \boldsymbol{\phi}\sqrt{\rho}) \\ +f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\mathbf{Q}|^{1/2} +\exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\mathbf{Q}\boldsymbol{\phi} \bigg) \\ +f(\theta_i) &= (2\pi)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} +\end{align} +$$ + +As in the BYM model $\boldsymbol{\theta}$ is distributed standard normal. Here, the parameter $\rho$ is on the unit interval and is interpreted as the proportion of spatial variation that is contributed to overall variation, and $\tau$ explains the overall (convolved) variation. + +Priors on $\rho$ should be chosen wisely as $\rho=0$ reduces to a model that not account for spatial variation and $\rho=1$ reduces to the ICAR model, which does not account for random variation among the spatial units. + ## Posterior Combining these components yields the following posteriors. For `stan_besag` we have, @@ -96,7 +112,8 @@ f(\rho) \times f(\lambda) $$ -and for `stan_bym` we have, + +and for both `stan_bym` and `stan_bym2` we have, $$ f(\alpha, \boldsymbol{\beta},\boldsymbol{\phi}, \boldsymbol{\theta}, \rho, \tau, \gamma | \mathbf{y},\mathbf{X}, \mathbf{Q}) \propto \prod_{i=1}^N f(y_i | \gamma) \times @@ -112,7 +129,7 @@ $$ As an example we use spatial units defined on a lattice. Below we plot a GMRF of 100 spatial units available in the rstanarm package. -```{r load-lattice, fig.align='center', fig.height=5} +```{r load-lattice, fig.align='center', fig.height=8} library(spdep) # Load the preconstruced lattice/GMRF data("lattice", package = "rstanarm") @@ -155,11 +172,11 @@ Now we can fit the model with `stan_besag`. ```{r fit-besag, results = "hide"} library(rstanarm) -fit_besag <- stan_besag(y ~ 1 + x + z, data = spatial_data, +fit_besag <- stan_besag(y ~ 1 + x + z, data = spatial_data, W, prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), family = binomial(link="logit"), trials = spatial_data$trials, chains = CHAINS, cores = CORES, seed = SEED, iter = ITER) -fit_besag_bad <- stan_besag(y ~ 1 + x + I(x^2), data = spatial_data, +fit_besag_bad <- stan_besag(y ~ 1 + x + I(x^2), data = spatial_data, W, prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), family = binomial(link="logit"), trials = spatial_data$trials, chains = CHAINS, cores = CORES, seed = SEED, iter = ITER) @@ -168,15 +185,15 @@ print(fit_besag_bad) ``` As a two-dimensional posterior predictive check we can plot the posterior predictions on the lattice using the `posterior_predict` function. -```{r ppcheck-2d, fig.align='center', fig.height=5} +```{r ppcheck-2d, fig.align='center', fig.height=8} grid_sim@data$y_pred <- colMeans(posterior_predict(fit_besag)) var_range_y_pred <- seq(min(grid_sim@data$y_pred), max(grid_sim@data$y_pred) + 1, by = 1) -spplot(grid_sim, "y", at = var_range_y_pred, main = expression(y[pred]), +spplot(grid_sim, "y_pred", at = var_range_y_pred, main = expression(y[pred]), col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(max(var_range_y_pred) + 1)) ``` Alternatively we can look at the conventional one-dimensional posterior predictive check with the `pp_check` function. -```{r ppcheck-1d, fig.align='center', fig.height=5} +```{r ppcheck-1d, fig.align='center', fig.height=8} pp_check(fit_besag) ``` @@ -196,7 +213,29 @@ compare(loo_besag, loo_besag_bad) ## Smoothing the Spatial Random Walk -In some cases modeling the GMRF spatial component with the precsion matrix $\mathbf{Q}$ leads to rough spatial varation. This occurs when dealing with spatial units on a lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation. Below we visually illustrate this result with a random walk in one-dimension using the `stan_rw` function with the argument `smooth = TRUE`. +In some cases modeling the GMRF spatial component with the precsion matrix $\mathbf{Q}$ leads to rough spatial varation. This occurs when dealing with spatial units on a lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation across the spatial units. Below we use the `order = 2` argument to fit the model with smoothing of order 2. + +```{r smoothing, results="hide"} +fit_besag_smooth <- stan_besag(y ~ 1 + x + z, data = spatial_data, W, order = 2, + prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), + family = binomial(link="logit"), trials = spatial_data$trials, + chains = CHAINS, cores = CORES, seed = SEED, iter = ITER) +``` + +Now we plot the results alongside the first fit with `order = 1`. + +```{r plot-smoothing, fig.align='center', fig.height=12} +grid_sim@data$y_pred_smooth <- colMeans(posterior_predict(fit_besag_smooth)) + +var_range_y_pred <- seq(min(grid_sim@data$y_pred_smooth), max(grid_sim@data$y_pred_smooth) + 1, by = 1) +gridExtra::grid.arrange(layout_matrix = matrix(1:2, nrow = 1), + spplot(grid_sim, "y_pred_smooth", at = var_range_y_pred, main = expression(y[pred_smooth]), + col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(max(var_range_y_pred) + 1)), + spplot(grid_sim, "y_pred", at = var_range_y_pred, main = expression(y[pred]), + col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(max(var_range_y_pred) + 1)) +) +``` + ## References From 4ea46745605e8ee1a777676521274df259079889 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 29 Aug 2017 23:49:53 -0400 Subject: [PATCH 32/59] remove INLA dependency for bym2 model --- R/stan_spatial.fit.R | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index 65e62fa9f..a68080372 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -391,24 +391,38 @@ stan_spatial.fit <- function(x, y, w, # create scaling_factor a la Dan Simpson create_scaling_factor <- function(dat) { edges <- dat$edges - #Build the adjacency matrix + # Build the adjacency matrix adj.matrix <- Matrix::sparseMatrix(i=edges[,1],j=edges[,2],x=1,symmetric=TRUE) - #The ICAR precision matrix (note! This is singular) + # The ICAR precision matrix (note! This is singular) Q <- Matrix::Diagonal(dat$N, Matrix::rowSums(adj.matrix)) - adj.matrix - - #Add a small jitter to the diagonal for numerical stability (optional but recommended) + # Add a small jitter to the diagonal for numerical stability (optional but recommended) Q_pert <- Q + Matrix::Diagonal(dat$N) * max(Matrix::diag(Q)) * sqrt(.Machine$double.eps) - # Compute the diagonal elements of the covariance matrix subject to the # constraint that the entries of the ICAR sum to zero. # See the function help for further details. - Q_inv <- INLA::inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) + # Q_inv <- INLA::inla.qinv(Q_pert, constr=list(A = matrix(1,1,dat$N),e=0)) + Q_inv <- qinv(Q_pert, A = matrix(1,1,dat$N)) # Compute the geometric mean of the variances, which are on the diagonal of Q.inv scaling_factor <- exp(mean(log(Matrix::diag(Q_inv)))) return(scaling_factor) } +# qinv function (analagous to inla.qinv) + +qinv <- function(Q, A = NULL) { + # need to replace the line below with the sparse version, using recursions + Sigma <- Matrix::solve(Q) + if (is.null(A)) + return(Sigma) + else { + A <- matrix(1,1, nrow(Sigma)) + W <- Sigma %*% t(A) + Sigma_const <- Sigma - W %*% solve(A %*% W) %*% t(W) + return(Sigma_const) + } +} + # Summarize spatial prior summarize_spatial_prior <- function(user_prior, From 41555ff2119bb95e89fd5ad5a10a4ea4b343f517 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Wed, 30 Aug 2017 18:07:37 -0400 Subject: [PATCH 33/59] updating CAR spatial tests --- R/stan_bym2.R | 2 +- R/stanreg.R | 6 +- tests/testthat/test_stan_besag.R | 10 +- tests/testthat/test_stan_bym.R | 317 ++++++++++++++++++------------- tests/testthat/test_stan_bym2.R | 211 ++++++++++++++++++++ 5 files changed, 406 insertions(+), 140 deletions(-) create mode 100644 tests/testthat/test_stan_bym2.R diff --git a/R/stan_bym2.R b/R/stan_bym2.R index bb844195b..56e7c41c3 100644 --- a/R/stan_bym2.R +++ b/R/stan_bym2.R @@ -162,7 +162,7 @@ stan_bym2 <- function(formula, terms = mt, call = match.call(), stan_function = stan_function) - + if (family$family == "binomial") { fit$family <- binomial(link = "logit") fit$trials <- trials diff --git a/R/stanreg.R b/R/stanreg.R index ffee71f01..3911c1e08 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -31,7 +31,7 @@ stanreg <- function(object) { nobs <- NROW(y) ynames <- if (is.matrix(y)) rownames(y) else names(y) - is_car <- object$stan_function %in% c("stan_besag", "stan_bym") + is_car <- object$stan_function %in% c("stan_besag", "stan_bym", "stan_bym2") is_betareg <- is.beta(family$family) if (is_betareg) { family_phi <- object$family_phi # pull out phi family/link @@ -45,7 +45,7 @@ stanreg <- function(object) { if (opt) { stanmat <- stanfit$theta_tilde probs <- c(0.025, .975) - browser() + stan_summary <- cbind(Median = apply(stanmat, 2L, median), MAD_SD = apply(stanmat, 2L, mad), t(apply(stanmat, 2L, quantile, probs))) @@ -111,7 +111,7 @@ stanreg <- function(object) { eta_z <- linear_predictor(coefs_z, z, object$offset) phi <- family_phi$linkinv(eta_z) } - + out <- nlist( coefficients = unpad_reTrms(coefs), ses = unpad_reTrms(ses), diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 5cd1a5106..9f76dc376 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -60,11 +60,11 @@ SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma( # compare answers with INLA (NB2 reciprocal_dispersion param fails!) test_that("stan_besag estimates match INLA", { - inla_gauss_est <- c(-0.0475, 0.4329, 0.9830, 0.8277) - inla_binom_est <- c(-1.9444, 0.3340, 0.423) - inla_pois_est <- c(0.7801, 0.4366, 0.3448) - inla_nb_est <- c(0.8053, 0.4362, 0.3574, 48.6003) - inla_gamma_est <- c(0.8119, -1.3407, 0.559, 1.106) + inla_gauss_est <- c(-0.0475, 0.4329, 1/0.9830, 1/0.8277) + inla_binom_est <- c(-1.9444, 0.3340, 1/0.4229) + inla_pois_est <- c(0.7801, 0.4366, 1/0.3448) + inla_nb_est <- c(0.8053, 0.4362, 1/0.3574, 48.6003) + inla_gamma_est <- c(0.8119, -1.3407, 1/0.559, 1/1.106) besag_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) besag_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) besag_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R index 4320b4cb3..11a47c421 100644 --- a/tests/testthat/test_stan_bym.R +++ b/tests/testthat/test_stan_bym.R @@ -18,139 +18,194 @@ # tests can be run using devtools::test() or manually by loading testthat # package and then running the code below possibly with options(mc.cores = 4). -if (.Platform$OS.type != "windows" && require(betareg)) { - library(rstanarm) - SEED <- 12345 - set.seed(SEED) - ITER <- 50 - CHAINS <- 2 - - context("stan_bym") - - source(file.path("helpers", "expect_stanreg.R")) - source(file.path("helpers", "SW.R")) - - data("lattice10", package = "rstanarm") - - # Convert a spatial polygon to an N-by-N weight matrix - sp2weightmatrix <- function(spatialpolygon) { - spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) - } - W <- sp2weightmatrix(grid_sim) - x <- rnorm(nrow(W), 2, 1) - spatial_data <- data.frame(x, phi = grid_sim@data$gmrf) - spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) - spatial_data$y_gauss <- rnorm(nrow(W), 0 + 0.4 * x + spatial_data$phi, 1) - spatial_data$y_pois <- rpois(nrow(W), exp(-1 + 1.4 * x + spatial_data$phi)) - spatial_data$trials <- rep(10, nrow(W)) - spatial_data$y_binom <- rbinom(nrow(W), spatial_data$trials, binomial(link = "logit")$linkinv(1 + 0.4 * x + spatial_data$phi)) - - # test family/link combinations - test_that("family = 'gaussian' works", { - SW(fit_gauss_ident <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_log <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), +library(rstanarm) +SEED <- 12345 +set.seed(SEED) +ITER <- 50 +CHAINS <- 2 + +context("stan_bym") +# source(paste0("tests/testthat/",(file.path("helpers", "expect_stanreg.R")))) +# source(paste0("tests/testthat/",(file.path("helpers", "SW.R")))) +source(file.path("helpers", "expect_stanreg.R")) +source(file.path("helpers", "SW.R")) + +data("lattice", package = "rstanarm") + +# Convert a spatial polygon to an N-by-N weight matrix +sp2weightmatrix <- function(spatialpolygon) { + spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +} +W <- sp2weightmatrix(grid_sim15) +spatial_data <- grid_sim15@data + +SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + prior_tau = normal(0,1), prior_rho = normal(0,1), + W = W, iter = 100, chains = 4)) +SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), + prior_tau = normal(0,1), prior_rho = normal(0,1), + family = binomial(link = "logit"), + W = W, iter = 100, chains = 4)) +SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), + prior_tau = normal(0,1), prior_rho = normal(0,1), + family = poisson(link = "log"), + W = W, iter = 500, chains = 4)) +SW(fit_nb2 <- stan_bym(y_pois ~ 1 + x, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + prior_tau = normal(0,1), prior_rho = normal(0,1), + family = neg_binomial_2(link = "log"), + W = W, iter = 500, chains = 4)) +SW(fit_gamma <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + prior_tau = normal(0,1), prior_rho = normal(0,1), + W = W, iter = 500, chains = 4)) + +# compare answers with INLA (NB2 reciprocal_dispersion param fails!) +test_that("stan_bym estimates match INLA", { + inla_gauss_est <- c(-0.0469, 0.4327, 1/0.8603, 1/1.6159, 1/2.5314) + inla_binom_est <- c(-1.9449, 0.3339, 1/0.5624, 1/13.5187) + inla_pois_est <- c(0.7792, 0.4365, 1/0.3874, 1/52.7799) + inla_nb_est <- c(0.8008, 0.4366, 1/0.3806, 1/66.9760, 35.4347) + inla_gamma_est <- c(0.7881, -1.3443, 1/0.6516, 1/24.4265, 1/1.1556) + bym_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) + bym_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) + bym_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) + bym_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) + bym_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) + expect_equal(bym_gauss, inla_gauss_est, tol = 0.2) + expect_equal(bym_binom, inla_binom_est, tol = 0.2) + expect_equal(bym_pois, inla_pois_est, tol = 0.2) + expect_equal(bym_nb2, inla_nb_est, tol = 0.2) + expect_equal(bym_gamma, inla_gamma_est, tol = 0.2) +}) + +# test family/link combinations +test_that("family = 'gaussian' works", { + SW(fit_gauss_ident <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_inv <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_gauss_ident) - expect_stanreg(fit_gauss_log) - expect_stanreg(fit_gauss_inv) - }) - test_that("family = 'binomial' works", { - SW(fit_binom_logit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_probit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "probit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cauchit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cauchit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_log <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "log"), + SW(fit_gauss_log <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gauss_inv <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_gauss_ident) + expect_stanreg(fit_gauss_log) + expect_stanreg(fit_gauss_inv) +}) +test_that("family = 'binomial' works", { + SW(fit_binom_logit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cloglog <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cloglog"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_binom_logit) - expect_stanreg(fit_binom_probit) - expect_stanreg(fit_binom_cauchit) - expect_stanreg(fit_binom_log) - expect_stanreg(fit_binom_cloglog) - - }) - test_that("family = 'poisson' works", { - SW(fit_pois_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), + SW(fit_binom_probit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "probit"), W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_pois_log) - expect_stanreg(fit_pois_ident) - expect_stanreg(fit_pois_sqrt) - }) - - # test QR - test_that("QR errors when number of predictors is <= 1", { - expect_error( - stan_bym(y_gauss ~ x, data = spatial_data, family = gaussian(), seed = SEED, QR = TRUE), - "'QR' can only be specified when there are multiple predictors" - ) - }) - - test_that("QR works when number of x and/or z predictors is >= 1", { - SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - expect_stanreg(fit_bym) - }) - - test_that("stan_bym works with QR = TRUE and algorithm = 'optimizing'", { - - }) - - test_that("loo/waic for stan_bym works", { - SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, - family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - loo(fit_gauss) - loo(fit_binom) - loo(fit_pois) - }) + SW(fit_binom_cauchit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cauchit"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_log <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_binom_cloglog <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cloglog"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_binom_logit) + expect_stanreg(fit_binom_probit) + expect_stanreg(fit_binom_cauchit) + expect_stanreg(fit_binom_log) + expect_stanreg(fit_binom_cloglog) - test_that("posterior_predict works for stan_bym", { - SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), +}) +test_that("family = 'poisson' works", { + SW(fit_pois_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_pois_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_pois_log) + expect_stanreg(fit_pois_ident) + expect_stanreg(fit_pois_sqrt) +}) + +# the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links +test_that("family = 'neg_binomial_2' works", { + SW(fit_nb2_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, - family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - preds_gauss <- posterior_predict(fit_gauss) - preds_binom <- posterior_predict(fit_binom) - preds_pois <- posterior_predict(fit_pois) - }) - - test_that("predict works for stan_bym", { - SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - pred_besag <- predict(fit_bym) - pred_new_besag <- predict(fit_bym, newdata = data.frame(x = rnorm(100, 2, 1))) - }) - - test_that("predict errors if nrow(newdata) < number of spatial regions", { - SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) - pred_besag <- predict(fit_bym) - expect_error(pred_new_besag <- predict(fit_bym, newdata = data.frame(x = rnorm(10, 2, 1))), - "'newdata' is less than the number of spatial regions.") - }) - -} \ No newline at end of file + SW(fit_nb2_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_nb2_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_nb2_log) + expect_stanreg(fit_nb2_ident) + expect_stanreg(fit_nb2_sqrt) +}) + +test_that("family = 'Gamma' works", { + SW(fit_gamma_log <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gamma_ident <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), + W = W, iter = ITER, chains = CHAINS)) + SW(fit_gamma_sqrt <- stan_bym(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), + W = W, iter = ITER, chains = CHAINS)) + expect_stanreg(fit_gamma_log) + expect_stanreg(fit_gamma_ident) + expect_stanreg(fit_gamma_sqrt) +}) + +# test QR +test_that("QR errors when number of predictors is <= 1", { + expect_error( + stan_bym(y_gauss ~ x, data = spatial_data, family = gaussian(), W = W, seed = SEED, QR = TRUE), + "'QR' can only be specified when there are multiple predictors" + ) +}) + +test_that("QR works when number of x predictors is > 1", { + SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + expect_stanreg(fit_bym) +}) + +test_that("stan_bym errors with algorithm = 'optimizing'", { + expect_error(stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, algorithm = "optimizing"), + "'arg' should be one of “sampling”, “meanfield”, “fullrank”") +}) + +test_that("loo/waic for stan_bym works", { + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + loo(fit_nb2) + loo(fit_gamma) +}) + +test_that("posterior_predict works for stan_bym", { + preds_gauss <- posterior_predict(fit_gauss) + preds_binom <- posterior_predict(fit_binom) + preds_pois <- posterior_predict(fit_pois) + preds_nb2 <- posterior_predict(fit_nb2) + preds_gamma <- posterior_predict(fit_gamma) +}) + +test_that("predict works for stan_bym", { + new_dat <- data.frame(x = rnorm(nrow(W), 2, 1)) + predict(fit_gauss) + predict(fit_binom) + predict(fit_pois) + predict(fit_nb2) + predict(fit_gamma) + predict(fit_gauss, newdata = new_dat) + predict(fit_binom, newdata = new_dat) + predict(fit_pois, newdata = new_dat) + predict(fit_nb2, newdata = new_dat) + predict(fit_gamma, newdata = new_dat) +}) + +test_that("predict errors if nrow(newdata) < number of spatial regions", { + expect_error(predict(fit_gauss, newdata = data.frame(x = rnorm(10, 2, 1))), + "'newdata' is less than the number of spatial regions.") +}) + diff --git a/tests/testthat/test_stan_bym2.R b/tests/testthat/test_stan_bym2.R new file mode 100644 index 000000000..3740c9318 --- /dev/null +++ b/tests/testthat/test_stan_bym2.R @@ -0,0 +1,211 @@ +# Part of the rstanarm package for estimating model parameters +# Copyright (C) 2015, 2016, 2017 Trustees of Columbia University +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# tests can be run using devtools::test() or manually by loading testthat +# package and then running the code below possibly with options(mc.cores = 4). + +library(rstanarm) +SEED <- 12345 +set.seed(SEED) +ITER <- 50 +CHAINS <- 2 + +context("stan_bym2") +# source(paste0("tests/testthat/",(file.path("helpers", "expect_stanreg.R")))) +# source(paste0("tests/testthat/",(file.path("helpers", "SW.R")))) +source(file.path("helpers", "expect_stanreg.R")) +source(file.path("helpers", "SW.R")) + +data("lattice", package = "rstanarm") + +# Convert a spatial polygon to an N-by-N weight matrix +sp2weightmatrix <- function(spatialpolygon) { + spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) +} +W <- sp2weightmatrix(grid_sim15) +spatial_data <- grid_sim15@data + +SW(fit_gauss <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + W = W, iter = 100, chains = 4)) +SW(fit_binom <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), + prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + family = binomial(link = "logit"), + W = W, iter = 100, chains = 4)) +SW(fit_pois <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), + prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + family = poisson(link = "log"), + W = W, iter = 500, chains = 4)) +SW(fit_nb2 <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + family = neg_binomial_2(link = "log"), + W = W, iter = 500, chains = 4)) +SW(fit_gamma <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), + prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), + prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + W = W, iter = 500, chains = 4)) + +# compare answers with INLA (NB2 reciprocal_dispersion param fails!) +test_that("stan_bym2 estimates match INLA", { + inla_gauss_est <- c(-0.0499, 0.4337, 0.4048, 1/1.0845, 1/2.1234) + inla_binom_est <- c(-1.9432, 0.3338, 0.7963, 1/1.6385) + inla_pois_est <- c(0.7813, 0.4361, 0.9127, 1/1.3033) + inla_nb_est <- c(0.8017, 0.4363, 0.9136, 1/1.3051, 117.9266) + inla_gamma_est <- c(0.7968, -1.3430, 0.807, 1/1.909, 1/1.140) + bym2_gauss <- unname(fit_gauss$stan_summary[1:5,"mean"]) + bym2_binom <- unname(fit_binom$stan_summary[1:4,"mean"]) + bym2_pois <- unname(fit_pois$stan_summary[1:4,"mean"]) + bym2_nb2 <- unname(fit_nb2$stan_summary[1:5,"mean"]) + bym2_gamma <- unname(fit_gamma$stan_summary[1:5,"mean"]) + expect_equal(bym2_gauss, inla_gauss_est, tol = 0.2) + expect_equal(bym2_binom, inla_binom_est, tol = 0.2) + expect_equal(bym2_pois, inla_pois_est, tol = 0.2) + expect_equal(bym2_nb2, inla_nb_est, tol = 0.2) + expect_equal(bym2_gamma, inla_gamma_est, tol = 0.2) +}) + +# test family/link combinations +test_that("family = 'gaussian' works", { + SW(fit_gauss_ident <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_gauss_log <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_gauss_inv <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_gauss_ident) + expect_stanreg(fit_gauss_log) + expect_stanreg(fit_gauss_inv) +}) +test_that("family = 'binomial' works", { + SW(fit_binom_logit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "logit"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_binom_probit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "probit"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_binom_cauchit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cauchit"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_binom_log <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "log"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_binom_cloglog <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, + family = binomial(link = "cloglog"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_binom_logit) + expect_stanreg(fit_binom_probit) + expect_stanreg(fit_binom_cauchit) + expect_stanreg(fit_binom_log) + expect_stanreg(fit_binom_cloglog) + +}) +test_that("family = 'poisson' works", { + SW(fit_pois_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_pois_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_pois_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_pois_log) + expect_stanreg(fit_pois_ident) + expect_stanreg(fit_pois_sqrt) +}) + +# the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links +test_that("family = 'neg_binomial_2' works", { + SW(fit_nb2_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_nb2_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_nb2_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_nb2_log) + expect_stanreg(fit_nb2_ident) + expect_stanreg(fit_nb2_sqrt) +}) + +test_that("family = 'Gamma' works", { + SW(fit_gamma_log <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_gamma_ident <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), + W = W, iter = 10, chains = CHAINS)) + SW(fit_gamma_sqrt <- stan_bym2(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), + W = W, iter = 10, chains = CHAINS)) + expect_stanreg(fit_gamma_log) + expect_stanreg(fit_gamma_ident) + expect_stanreg(fit_gamma_sqrt) +}) + +# test QR +test_that("QR errors when number of predictors is <= 1", { + expect_error( + stan_bym2(y_gauss ~ x, data = spatial_data, family = gaussian(), W = W, seed = SEED, QR = TRUE), + "'QR' can only be specified when there are multiple predictors" + ) +}) + +test_that("QR works when number of x predictors is > 1", { + SW(stan_bym <- stan_bym2(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + expect_stanreg(stan_bym) +}) + +test_that("stan_bym2 errors with algorithm = 'optimizing'", { + expect_error(stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = gaussian(), + W = W, iter = ITER, chains = CHAINS, algorithm = "optimizing"), + "'arg' should be one of “sampling”, “meanfield”, “fullrank”") +}) + +test_that("loo/waic for stan_bym2 works", { + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + loo(fit_nb2) + loo(fit_gamma) +}) + +test_that("posterior_predict works for stan_bym2", { + preds_gauss <- posterior_predict(fit_gauss) + preds_binom <- posterior_predict(fit_binom) + preds_pois <- posterior_predict(fit_pois) + preds_nb2 <- posterior_predict(fit_nb2) + preds_gamma <- posterior_predict(fit_gamma) +}) + +test_that("predict works for stan_bym2", { + new_dat <- data.frame(x = rnorm(nrow(W), 2, 1)) + predict(fit_gauss) + predict(fit_binom) + predict(fit_pois) + predict(fit_nb2) + predict(fit_gamma) + predict(fit_gauss, newdata = new_dat) + predict(fit_binom, newdata = new_dat) + predict(fit_pois, newdata = new_dat) + predict(fit_nb2, newdata = new_dat) + predict(fit_gamma, newdata = new_dat) +}) + +test_that("predict errors if nrow(newdata) < number of spatial regions", { + expect_error(predict(fit_gauss, newdata = data.frame(x = rnorm(10, 2, 1))), + "'newdata' is less than the number of spatial regions.") +}) + From 31e8d1cc6b449a70dc2c0f29dbcfca5b52d6dfeb Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Wed, 30 Aug 2017 18:44:03 -0400 Subject: [PATCH 34/59] update CAR vignette --- vignettes/spatial.Rmd | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index 46e21909f..8a2e0c610 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -23,7 +23,7 @@ params: ## Introduction -This vignette explains how to account for spatial variation with conditional autoregressive (CAR) models when modeling discrete or continuous outcomes using the `stan_besag` and `stan_bym` functions in the __rstanarm__ package. The `stan_besag` function allows you to model space as an intrinsic conditional autoregressive model (ICAR) and the `stan_bym` is a variant of the Besag, York, Mollie (YEAR) model where the priors are more interpretable. +This vignette explains how to account for spatial variation with conditional autoregressive (CAR) models when modeling discrete or continuous outcomes using the `stan_besag`, `stan_bym`, and `stan_bym2` functions in the __rstanarm__ package. The `stan_besag` function allows you to model space as an intrinsic conditional autoregressive model (ICAR), the `stan_bym` function allows you to fit the Besag, York, Mollie (1991) CAR model, and the `stan_bym2` is a variant of the BYM model where the priors are more interpretable (see Riebler et al (2016) for details). ```{r, child="children/four_steps.txt"} ``` @@ -34,15 +34,15 @@ the likelihood is the product of beta distributions. ## Likelihood -The likelihoods supported in each function include Gaussian, Binomial, Poisson, Negative Binomial, and Gamma. For details on the link functions available and the contribution to the posterior of each of these likelihoods consult the appropriate [vignette](http://mc-stan.org/rstanarm/articles/index.html). +The likelihoods supported in each CAR modeling function include Gaussian, Binomial, Poisson, Negative Binomial, and Gamma. For details on the link functions available and the contribution to the posterior of each of these likelihoods consult the appropriate [vignette](http://mc-stan.org/rstanarm/articles/index.html). The linear predictor takes the following form, $$ \boldsymbol{\eta} = \alpha + \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\psi} $$ -where $\alpha$ is the intercept, $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors, $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect (and $N$ denotes the number of spatial units). The construction of $\boldsymbol{\psi}$ depends on the model, and this is discussed in the relevant sections below. +where $\alpha$ is the intercept, $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors, $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect (and $N$ denotes the number of spatial units). The construction of $\boldsymbol{\psi}$ depends on the model, which is discussed in the relevant sections below. -Depending on the choice of likelihood there may or may not be an additional auxiliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data). Thus, for some probability density/mass function $f$ the general form of the likelihood is, +Depending on the choice of likelihood there may or may not be an additional auxiliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data). Thus, for some probability density/mass function $f$ we can state the general form of the likelihood as, $$ \mathcal{L}(\alpha, \boldsymbol{\beta}, \gamma | \mathbf{y}) = \prod_{i=1}^N f(y_i | \alpha, \boldsymbol{\beta}, \gamma ) $$ @@ -73,10 +73,10 @@ where $\rho$ is a scalar that controls the overall spatial variation and has an ## BYM -The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which results in misleading parameter estimates and invalid inferences. The BYM model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial component takes the following form, +The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which results in misleading parameter estimates and invalid inferences. The `stan_bym` model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial component takes the following form, $$ \begin{align} -\boldsymbol{\psi} &= \rho\phi + \tau\theta \\ +\boldsymbol{\psi} &= \rho\boldsymbol{\phi} + \tau\boldsymbol{\theta} \\ f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\mathbf{Q}|^{1/2} \exp\bigg( -\frac{1}{2}\boldsymbol{\phi}^{\top}\mathbf{Q}\boldsymbol{\phi} \bigg) \\ f(\theta_i) &= (2\pi)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} @@ -119,7 +119,7 @@ f(\alpha, \boldsymbol{\beta},\boldsymbol{\phi}, \boldsymbol{\theta}, \rho, \tau, \prod_{i=1}^N f(y_i | \gamma) \times \prod_{k=1}^K f(\beta_k) \times f(\boldsymbol{\phi} | \mathbf{Q}, \rho) \times -\prod_{k=1}^K f(\theta_i) \times +\prod_{i=1}^K f(\theta_i) \times f(\rho) \times f(\tau) \times f(\lambda) @@ -127,7 +127,7 @@ $$ ## An Example Using Simulated Data on a Lattice -As an example we use spatial units defined on a lattice. Below we plot a GMRF of 100 spatial units available in the rstanarm package. +As an example we use spatial units defined on a lattice. Below we plot a GMRF of 900 spatial units available in the rstanarm package. ```{r load-lattice, fig.align='center', fig.height=8} library(spdep) @@ -156,7 +156,6 @@ trials <- rep(10, nrow(W)) spatial_data <- data.frame(x, z, phi = grid_sim@data$gmrf, trials) eta <- binomial(link="logit")$linkinv(0.5 + 0.4 * x + 0.8 * z + spatial_data$phi) spatial_data$y <- rbinom(nrow(W), trials, eta) -table(spatial_data$y) ``` Plotting the outcome data on the lattice gives us a better understanding of its spatial variation. @@ -168,7 +167,7 @@ spplot(grid_sim, "y", at = var_range_y, main = expression(y), col.regions = colorRampPalette(c("#ef8a62", "#f7f7f7", "#67a9cf"))(max(var_range_y) + 1)) ``` -Now we can fit the model with `stan_besag`. +Now we can fit the model with `stan_besag` (we also fit a model that does not match that data generating process for model selection purposes). ```{r fit-besag, results = "hide"} library(rstanarm) @@ -213,7 +212,7 @@ compare(loo_besag, loo_besag_bad) ## Smoothing the Spatial Random Walk -In some cases modeling the GMRF spatial component with the precsion matrix $\mathbf{Q}$ leads to rough spatial varation. This occurs when dealing with spatial units on a lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation across the spatial units. Below we use the `order = 2` argument to fit the model with smoothing of order 2. +In some cases modeling the GMRF spatial component with the precision matrix $\mathbf{Q}$ leads to rough spatial varation. This often occurs when dealing with spatial units on a fine lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation across the spatial units. Below we use the `order = 2` argument to fit the model with smoothing of order 2. ```{r smoothing, results="hide"} fit_besag_smooth <- stan_besag(y ~ 1 + x + z, data = spatial_data, W, order = 2, @@ -236,6 +235,7 @@ gridExtra::grid.arrange(layout_matrix = matrix(1:2, nrow = 1), ) ``` +The `stan_bym` and `stan_bym2` functions can be used in a similar way. ## References From c3a55d0cb297476473bf942654039f16e1bfba7e Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Thu, 31 Aug 2017 02:23:27 -0400 Subject: [PATCH 35/59] changing names for spatial priors --- R/stan_besag.R | 6 +++--- R/stan_bym.R | 8 ++++---- R/stan_bym2.R | 14 +++++++------- tests/testthat/test_stan_bym.R | 10 +++++----- tests/testthat/test_stan_bym2.R | 10 +++++----- vignettes/spatial.Rmd | 9 ++++++--- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 23e800b31..0172751c3 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -43,7 +43,7 @@ #' @param trials If \code{family = binomial()} then a vector of trials (equal in #' length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_tau The prior distribution on the variance of the non-centered +#' @param prior_structured The prior distribution on the variance of the non-centered #' structured (spatial) effect. #' @param order Order of the spatial random walk. Specifying \code{order = 2} #' will smooth the spatial variation. The default is \code{order = 1}. @@ -107,7 +107,7 @@ stan_besag <- function(formula, order = 1, ..., prior = normal(), prior_intercept = normal(), - prior_tau = normal(), prior_aux = NULL, + prior_structured = normal(), prior_aux = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -132,7 +132,7 @@ stan_besag <- function(formula, prior = prior, prior_intercept = prior_intercept, prior_aux = prior_aux, - prior_tau = prior_tau, + prior_tau = prior_structured, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/R/stan_bym.R b/R/stan_bym.R index 923bd9083..9c6426a21 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -43,9 +43,9 @@ #' @param trials If \code{family = binomial()} then a vector of trials (equal in #' length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_tau The prior on the marginal variance contribution of the +#' @param prior_unstructured The prior on the marginal variance contribution of the #' unstructured (random) effect. -#' @param prior_rho The prior on the marginal variance contribution of the +#' @param prior_structured The prior on the marginal variance contribution of the #' structured (spatial) effect. #' @param order Order of the spatial random walk. Specifying \code{order = 2} #' will smooth the spatial variation. The default is \code{order = 1}. @@ -111,7 +111,7 @@ stan_bym <- function(formula, order = 1, ..., prior = normal(), prior_intercept = normal(), - prior_tau = normal(), prior_rho = normal(), prior_aux = NULL, + prior_unstructured = normal(), prior_structured = normal(), prior_aux = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -135,7 +135,7 @@ stan_bym <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, - prior_aux = prior_aux, prior_rho = prior_rho, prior_tau = prior_tau, + prior_aux = prior_aux, prior_rho = prior_structured, prior_tau = prior_unstructured, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/R/stan_bym2.R b/R/stan_bym2.R index 56e7c41c3..b80cde5be 100644 --- a/R/stan_bym2.R +++ b/R/stan_bym2.R @@ -43,9 +43,9 @@ #' @param trials If \code{family = binomial()} then a vector of trials (equal in #' length to the outcome) must be declared. #' @param W An N-by-N spatial weight matrix. -#' @param prior_tau The prior on the marginal variance contribution of the +#' @param prior_structured The prior on the marginal variance contribution of the #' structured (spatial) and unstructured (random) effect. -#' @param prior_rho The prior on the proportion of the marginal variance that is +#' @param prior_mixing The prior on the proportion of the marginal variance that is #' explained by the structured (spatial) effect. The hyperparameter \code{rho} #' is on the unit interval so users have the option of declaring a Beta prior #' distribution or a flat prior. A prior distribution with most of the mass @@ -119,7 +119,7 @@ stan_bym2 <- function(formula, order = 1, ..., prior = normal(), prior_intercept = normal(), - prior_tau = normal(), prior_rho = beta(0.5,0.5), prior_aux = NULL, + prior_structured = normal(), prior_mixing = beta(0.5,0.5), prior_aux = NULL, prior_PD = FALSE, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, @@ -135,9 +135,9 @@ stan_bym2 <- function(formula, Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) - if (!is.null(prior_rho)) { - if (prior_rho$dist != "beta") - stop("'prior_rho' must be either beta() or NULL.") + if (!is.null(prior_mixing)) { + if (prior_mixing$dist != "beta") + stop("'prior_mixing' must be either beta() or NULL.") } stanfit <- stan_spatial.fit(x = X, y = Y, w = W, @@ -148,7 +148,7 @@ stan_bym2 <- function(formula, ..., prior = prior, prior_intercept = prior_intercept, - prior_aux = prior_aux, prior_rho = prior_rho, prior_tau = prior_tau, + prior_aux = prior_aux, prior_rho = prior_mixing, prior_tau = prior_structured, prior_PD = prior_PD, algorithm = algorithm, adapt_delta = adapt_delta, QR = QR) diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R index 11a47c421..37bc4ee44 100644 --- a/tests/testthat/test_stan_bym.R +++ b/tests/testthat/test_stan_bym.R @@ -41,26 +41,26 @@ spatial_data <- grid_sim15@data SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - prior_tau = normal(0,1), prior_rho = normal(0,1), + prior_unstructured = normal(0,1), prior_structured = normal(0,1), W = W, iter = 100, chains = 4)) SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), - prior_tau = normal(0,1), prior_rho = normal(0,1), + prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = binomial(link = "logit"), W = W, iter = 100, chains = 4)) SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), - prior_tau = normal(0,1), prior_rho = normal(0,1), + prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = poisson(link = "log"), W = W, iter = 500, chains = 4)) SW(fit_nb2 <- stan_bym(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - prior_tau = normal(0,1), prior_rho = normal(0,1), + prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = neg_binomial_2(link = "log"), W = W, iter = 500, chains = 4)) SW(fit_gamma <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - prior_tau = normal(0,1), prior_rho = normal(0,1), + prior_unstructured = normal(0,1), prior_structured = normal(0,1), W = W, iter = 500, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) diff --git a/tests/testthat/test_stan_bym2.R b/tests/testthat/test_stan_bym2.R index 3740c9318..1054e4990 100644 --- a/tests/testthat/test_stan_bym2.R +++ b/tests/testthat/test_stan_bym2.R @@ -41,26 +41,26 @@ spatial_data <- grid_sim15@data SW(fit_gauss <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), W = W, iter = 100, chains = 4)) SW(fit_binom <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), - prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = binomial(link = "logit"), W = W, iter = 100, chains = 4)) SW(fit_pois <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), - prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = poisson(link = "log"), W = W, iter = 500, chains = 4)) SW(fit_nb2 <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = neg_binomial_2(link = "log"), W = W, iter = 500, chains = 4)) SW(fit_gamma <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - prior_tau = normal(0,1), prior_rho = beta(0.5,0.5), + prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), W = W, iter = 500, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index 8a2e0c610..7fd634d3c 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -196,9 +196,9 @@ Alternatively we can look at the conventional one-dimensional posterior predicti pp_check(fit_besag) ``` -Compare model predictive performance using the [loo](http://mc-stan.org/loo) package. +We can also compare the model's predictive performance using the [loo](http://mc-stan.org/loo) package. -```{r loo-besag} +```{r loo-besag, results='hide'} library(loo) loo_besag <- loo(fit_besag) loo_besag_bad <- loo(fit_besag_bad) @@ -210,9 +210,12 @@ print(loo_besag_bad) compare(loo_besag, loo_besag_bad) ``` + +The difference between these two models is negative indicating the correct model has higher predictive accuracy. + ## Smoothing the Spatial Random Walk -In some cases modeling the GMRF spatial component with the precision matrix $\mathbf{Q}$ leads to rough spatial varation. This often occurs when dealing with spatial units on a fine lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation across the spatial units. Below we use the `order = 2` argument to fit the model with smoothing of order 2. +In some cases modeling the GMRF spatial component with the precision matrix $\mathbf{Q}$ leads to rough spatial varation. This often occurs when dealing with spatial units on a fine lattice. Using the square of the precision matrix $\mathbf{Q}\mathbf{Q}$ allows us to smooth out the spatial variation across the spatial units using a spatial random walk of order 2. Below we use the `order = 2` argument to fit the model with smoothing of order 2. ```{r smoothing, results="hide"} fit_besag_smooth <- stan_besag(y ~ 1 + x + z, data = spatial_data, W, order = 2, From 2a9001ac75aa557212d1868f3caaa62168a10ab9 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Thu, 11 Jan 2018 19:41:41 -0800 Subject: [PATCH 36/59] updates to besag unit tests --- tests/testthat/test_stan_besag.R | 2 +- vignettes/spatial.Rmd | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 9f76dc376..bbbc32bdc 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -60,7 +60,7 @@ SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma( # compare answers with INLA (NB2 reciprocal_dispersion param fails!) test_that("stan_besag estimates match INLA", { - inla_gauss_est <- c(-0.0475, 0.4329, 1/0.9830, 1/0.8277) + inla_gauss_est <- c(-0.0475, 0.4329, 1/0.8277, 1/0.9830) inla_binom_est <- c(-1.9444, 0.3340, 1/0.4229) inla_pois_est <- c(0.7801, 0.4366, 1/0.3448) inla_nb_est <- c(0.8053, 0.4362, 1/0.3574, 48.6003) diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index 7fd634d3c..967069e39 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -54,7 +54,7 @@ $$ f(\boldsymbol{\phi} | \boldsymbol{\mu}) = (2\pi)^{-n/2} |\mathbf{W}|^{1/2} \exp\bigg( -\frac{1}{2}(\boldsymbol{\phi-\mu})^{\top}\mathbf{W}(\boldsymbol{\phi-\mu}) \bigg) $$ -and $W_{i,j} \neq 0$ when $\{i,j\}\in\mathcal{E}$ for all $i \neq j$. Here, $\mathcal{V}$ refers to the verticies on the graph (i.e. the spatial units) and $\mathcal{E}$ refers to the edges on the graph (i.e. the spatial units that are neighbors). So $\mathbf{W}$ is an $N$-by-$N$ matrix (with zeros on the diagonal) which describes spatial adjacency. +and $W_{i,j} \neq 0$ when $\{i,j\}\in\mathcal{E}$ for all $i \neq j$. Here, $\mathcal{V}$ refers to the verticies on the graph (i.e. the spatial units) and $\mathcal{E}$ refers to the edges on the graph (i.e. the spatial units that are neighbors). In other words, $\mathbf{W}$ is an $N$-by-$N$ matrix (with zeros on the diagonal) which describes spatial adjacency. Unfortunately there is no guarantee that $\mathbf{W}$ is positive definite so $\mathbf{Q} = \mbox{diag}(\mathbf{W1}) - W$ (which is guaranteed to be positive semi-definite) is used as the precision matrix. @@ -69,11 +69,11 @@ f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\tau\mathbf{Q}|^{1/2} \end{align} $$ -where $\rho$ is a scalar that controls the overall spatial variation and has an appropriate hyperprior distribution. +where $\tau$ is a scalar that controls the overall spatial variation and has an appropriate hyperprior distribution. ## BYM -The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which results in misleading parameter estimates and invalid inferences. The `stan_bym` model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial component takes the following form, +The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which results in misleading parameter estimates and invalid inferences. The `stan_bym` model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial effect takes the following form, $$ \begin{align} \boldsymbol{\psi} &= \rho\boldsymbol{\phi} + \tau\boldsymbol{\theta} \\ @@ -86,7 +86,7 @@ Note that the unstructured effect $\boldsymbol{\theta}$ is distributed standard ## BYM2 (Variant of the BYM Spatial Prior) -The `stan_bym2` modeling function fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and thex unstructured (random) effect, +The `stan_bym2` modeling function fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and the unstructured (random) effect, $$ \begin{align} \boldsymbol{\psi} &= \tau(\boldsymbol{\theta}\sqrt{1-\rho} + \boldsymbol{\phi}\sqrt{\rho}) \\ @@ -96,7 +96,7 @@ f(\theta_i) &= (2\pi)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} \end{align} $$ -As in the BYM model $\boldsymbol{\theta}$ is distributed standard normal. Here, the parameter $\rho$ is on the unit interval and is interpreted as the proportion of spatial variation that is contributed to overall variation, and $\tau$ explains the overall (convolved) variation. +As in the BYM model $\boldsymbol{\theta}$ is distributed standard normal. However, the parameter $\rho$ is on the unit interval and is interpreted as the proportion of spatial variation that is contributed to overall variation, and $\tau$ explains the overall (convolved) variation. Priors on $\rho$ should be chosen wisely as $\rho=0$ reduces to a model that not account for spatial variation and $\rho=1$ reduces to the ICAR model, which does not account for random variation among the spatial units. From ee55e48cf462b87b5ce14b3fc6810765d43d28b3 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sat, 20 Jan 2018 23:42:25 -0500 Subject: [PATCH 37/59] getting spatial models to compile --- DESCRIPTION | 2 +- R/posterior_predict.R | 1 + inst/chunks/priors.stan | 45 -------- inst/chunks/priors_aux.stan | 10 -- inst/chunks/tparameters.stan | 31 ------ src/Makevars | 2 +- src/Makevars.win | 4 +- src/stan_files/continuous.stan | 28 ----- {exec => src/stan_files}/spatial.stan | 141 ++++++++++++++++++-------- 9 files changed, 105 insertions(+), 159 deletions(-) delete mode 100644 inst/chunks/priors.stan delete mode 100644 inst/chunks/priors_aux.stan delete mode 100644 inst/chunks/tparameters.stan rename {exec => src/stan_files}/spatial.stan (63%) diff --git a/DESCRIPTION b/DESCRIPTION index 29d099595..346fa7276 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -63,4 +63,4 @@ LazyData: true NeedsCompilation: yes URL: http://discourse.mc-stan.org, http://mc-stan.org/ BugReports: https://github.com/stan-dev/rstanarm/issues -RoxygenNote: 5.0.1 +RoxygenNote: 6.0.1 diff --git a/R/posterior_predict.R b/R/posterior_predict.R index fc0c3713e..a5cb3cf8a 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -493,3 +493,4 @@ pp_binomial_trials <- function(object, newdata = NULL, m = NULL) { return(rowSums(y)) rep(1, NROW(y)) } +} diff --git a/inst/chunks/priors.stan b/inst/chunks/priors.stan deleted file mode 100644 index ac31d3519..000000000 --- a/inst/chunks/priors.stan +++ /dev/null @@ -1,45 +0,0 @@ -// Log-priors for coefficients - if (prior_dist == 1) target += normal_lpdf(z_beta | 0, 1); -else if (prior_dist == 2) target += normal_lpdf(z_beta | 0, 1); // Student t -else if (prior_dist == 3) { // hs - real log_half = -0.693147180559945286; - target += normal_lpdf(z_beta | 0, 1); - target += normal_lpdf(local[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); - target += normal_lpdf(global[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); -} -else if (prior_dist == 4) { // hs+ - real log_half = -0.693147180559945286; - target += normal_lpdf(z_beta | 0, 1); - target += normal_lpdf(local[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); - target += normal_lpdf(local[3] | 0, 1) - log_half; - // unorthodox useage of prior_scale as another df hyperparameter - target += inv_gamma_lpdf(local[4] | 0.5 * prior_scale, 0.5 * prior_scale); - target += normal_lpdf(global[1] | 0, 1) - log_half; - target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); -} -else if (prior_dist == 5) { // laplace - target += normal_lpdf(z_beta | 0, 1); - target += exponential_lpdf(mix[1] | 1); -} -else if (prior_dist == 6) { // lasso - target += normal_lpdf(z_beta | 0, 1); - target += exponential_lpdf(mix[1] | 1); - target += chi_square_lpdf(one_over_lambda[1] | prior_df[1]); -} -else if (prior_dist == 7) { // product_normal - target += normal_lpdf(z_beta | 0, 1); -} -/* else prior_dist is 0 and nothing is added */ - -// Log-prior for intercept -if (has_intercept == 1) { - if (prior_dist_for_intercept == 1) // normal - target += normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); - else if (prior_dist_for_intercept == 2) // student_t - target += student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, - prior_scale_for_intercept); - /* else prior_dist is 0 and nothing is added */ -} diff --git a/inst/chunks/priors_aux.stan b/inst/chunks/priors_aux.stan deleted file mode 100644 index 986f5058c..000000000 --- a/inst/chunks/priors_aux.stan +++ /dev/null @@ -1,10 +0,0 @@ -// Log-priors -if (prior_dist_for_aux > 0 && prior_scale_for_aux > 0) { - real log_half = -0.693147180559945286; - if (prior_dist_for_aux == 1) - target += normal_lpdf(aux_unscaled | 0, 1) - log_half; - else if (prior_dist_for_aux == 2) - target += student_t_lpdf(aux_unscaled | prior_df_for_aux, 0, 1) - log_half; - else - target += exponential_lpdf(aux_unscaled | 1); -} diff --git a/inst/chunks/tparameters.stan b/inst/chunks/tparameters.stan deleted file mode 100644 index e050733ad..000000000 --- a/inst/chunks/tparameters.stan +++ /dev/null @@ -1,31 +0,0 @@ -if (prior_dist == 0) beta = z_beta; -else if (prior_dist == 1) beta = z_beta .* prior_scale + prior_mean; -else if (prior_dist == 2) for (k in 1:K) { - beta[k] = CFt(z_beta[k], prior_df[k]) * prior_scale[k] + prior_mean[k]; -} -else if (prior_dist == 3) { - if (is_continuous == 1 && family == 1) - beta = hs_prior(z_beta, global, local, global_prior_scale, aux); - else beta = hs_prior(z_beta, global, local, global_prior_scale, 1); -} -else if (prior_dist == 4) { - if (is_continuous == 1 && family == 1) - beta = hsplus_prior(z_beta, global, local, global_prior_scale, aux); - else beta = hsplus_prior(z_beta, global, local, global_prior_scale, 1); -} -else if (prior_dist == 5) // laplace - beta = prior_mean + prior_scale .* sqrt(2 * mix[1]) .* z_beta; -else if (prior_dist == 6) // lasso - beta = prior_mean + one_over_lambda[1] * prior_scale .* sqrt(2 * mix[1]) .* z_beta; -else if (prior_dist == 7) { // product_normal - int z_pos = 1; - for (k in 1:K) { - beta[k] = z_beta[z_pos]; - z_pos = z_pos + 1; - for (n in 2:num_normals[k]) { - beta[k] = beta[k] * z_beta[z_pos]; - z_pos = z_pos + 1; - } - beta[k] = beta[k] * prior_scale[k] ^ num_normals[k] + prior_mean[k]; - } -} diff --git a/src/Makevars b/src/Makevars index fa9949083..20e225a27 100644 --- a/src/Makevars +++ b/src/Makevars @@ -1,6 +1,6 @@ STANHEADERS_SRC = `"$(R_HOME)/bin$(R_ARCH_BIN)/Rscript" --vanilla -e "cat(system.file('include', 'src', package = 'StanHeaders'))"` PKG_CPPFLAGS = -I"../inst/include" -I"$(STANHEADERS_SRC)" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -DEIGEN_NO_DEBUG -DBOOST_MATH_OVERFLOW_ERROR_POLICY=ignore_error -SOURCES = stan_files/bernoulli.stan stan_files/binomial.stan stan_files/continuous.stan stan_files/count.stan stan_files/jm.stan stan_files/lm.stan stan_files/mvmer.stan stan_files/polr.stan +SOURCES = stan_files/bernoulli.stan stan_files/binomial.stan stan_files/continuous.stan stan_files/count.stan stan_files/jm.stan stan_files/lm.stan stan_files/mvmer.stan stan_files/polr.stan stan_files/spatial.stan OBJECTS = $(SOURCES:.stan=.o) init.o all: $(SHLIB) diff --git a/src/Makevars.win b/src/Makevars.win index 151f3dbd7..11d01e3d9 100644 --- a/src/Makevars.win +++ b/src/Makevars.win @@ -3,7 +3,7 @@ BOOST_NOT_IN_BH_SRC = `"$(R_HOME)/bin$(R_ARCH_BIN)/Rscript" --vanilla -e "cat(sy PKG_CPPFLAGS = -I"../inst/include" -I"$(STANHEADERS_SRC)" -I"$(BOOST_NOT_IN_BH_SRC)" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -DEIGEN_NO_DEBUG -DBOOST_NO_CXX11_RVALUE_REFERENCES CXX_STD = CXX11 -SOURCES = stan_files/bernoulli.stan stan_files/binomial.stan stan_files/continuous.stan stan_files/count.stan stan_files/jm.stan stan_files/lm.stan stan_files/mvmer.stan stan_files/polr.stan +SOURCES = stan_files/bernoulli.stan stan_files/binomial.stan stan_files/continuous.stan stan_files/count.stan stan_files/jm.stan stan_files/lm.stan stan_files/mvmer.stan stan_files/polr.stan stan_files/spatial.stan OBJECTS = $(SOURCES:.stan=.o) init.o all: $(SHLIB) @@ -17,5 +17,5 @@ clean: %.cc: %.stan "$(R_HOME)/bin$(R_ARCH_BIN)/Rscript" -e "source(file.path('..', 'tools', 'make_cc.R')); make_cc(commandArgs(TRUE))" $< - + .phony: clean diff --git a/src/stan_files/continuous.stan b/src/stan_files/continuous.stan index 5959710cb..863ef21a1 100644 --- a/src/stan_files/continuous.stan +++ b/src/stan_files/continuous.stan @@ -7,34 +7,6 @@ functions { #include /functions/continuous_likelihoods.stan #include /functions/SSfunctions.stan - /* - * Calculate lower bound on intercept - * - * @param family Integer family code - * @param link Integer link code - * @return real lower bound - */ - real make_lower(int family, int link) { - if (family == 1) return negative_infinity(); // Gaussian - if (family <= 3) { // Gamma or inverse Gaussian - if (link == 2) return negative_infinity(); // log - return 0; - } - return negative_infinity(); - } - - /* - * Calculate upper bound on intercept - * - * @param family Integer family code - * @param link Integer link code - * @return real upper bound - */ - real make_upper(int family, int link) { - if (family == 4 && link == 5) return 0; - return positive_infinity(); - } - /** * test function for csr_matrix_times_vector * diff --git a/exec/spatial.stan b/src/stan_files/spatial.stan similarity index 63% rename from exec/spatial.stan rename to src/stan_files/spatial.stan index 116d1c5ed..fdf4532ee 100644 --- a/exec/spatial.stan +++ b/src/stan_files/spatial.stan @@ -1,42 +1,11 @@ -#include "Columbia_copyright.stan" -#include "license.stan" // GPL3+ +#include /pre/Columbia_copyright.stan +#include /pre/license.stan // CAR SPATIAL MODELS functions { - #include "continuous_likelihoods.stan" - #include "binomial_likelihoods.stan" - #include "count_likelihoods.stan" - #include "common_functions.stan" - /* - * Calculate lower bound on intercept - * - * @param family Integer family code - * @param link Integer link code - * @return real lower bound - */ - real make_lower(int family, int link) { - if (family == 1) return negative_infinity(); // Gaussian - if (family == 5) { // Gamma - if (link == 2) return negative_infinity(); // log - return 0; // identity or inverse - } - if (family == 2 || family == 3) { // Poisson or nb2 - if (link == 1) return negative_infinity(); // log - return 0.0; // identity or sqrt - } - return negative_infinity(); - } - - /* - * Calculate upper bound on intercept - * - * @param family Integer family code - * @param link Integer link code - * @return real upper bound - */ - real make_upper(int family, int link) { - if (family == 4 && link == 4) return 0.0; // binomial; log - return positive_infinity(); - } +#include /functions/continuous_likelihoods.stan +#include /functions/binomial_likelihoods.stan +#include /functions/count_likelihoods.stan +#include /functions/common_functions.stan } data { int N; // number of regions @@ -88,6 +57,7 @@ data { real prior_mean_for_aux; real prior_scale_for_aux; real prior_df_for_aux; + real slab_scale; // for hs prior only } transformed data { real poisson_max = pow(2.0, 30.0); @@ -109,8 +79,9 @@ parameters { real global[hs]; vector[K] local[hs]; vector[K] mix[prior_dist == 5 || prior_dist == 6]; - real aux_unscaled[has_aux]; # interpretation depends on family! + real aux_unscaled[has_aux]; // interpretation depends on family! real one_over_lambda[prior_dist == 6]; + real caux[hs > 0]; } transformed parameters { vector[K] beta; // predictors on covariates (including intercept) @@ -137,7 +108,40 @@ transformed parameters { else if (model_type == 3) psi = tau*(sqrt(1-rho[1])*theta_raw + sqrt(rho[1]/scaling_factor)*phi); // for regression coefficients - #include "tparameters.stan" + // "tparameters.stan" + if (prior_dist == 0) beta = z_beta; + else if (prior_dist == 1) beta = z_beta .* prior_scale + prior_mean; + else if (prior_dist == 2) for (k in 1:K) { + beta[k] = CFt(z_beta[k], prior_df[k]) * prior_scale[k] + prior_mean[k]; + } + else if (prior_dist == 3) { + real c2 = square(slab_scale) * caux[1]; + if (is_continuous == 1 && family == 1) + beta = hs_prior(z_beta, global, local, global_prior_scale, aux, c2); + else beta = hs_prior(z_beta, global, local, global_prior_scale, 1, c2); + } + else if (prior_dist == 4) { + real c2 = square(slab_scale) * caux[1]; + if (is_continuous == 1 && family == 1) + beta = hsplus_prior(z_beta, global, local, global_prior_scale, aux, c2); + else beta = hsplus_prior(z_beta, global, local, global_prior_scale, 1, c2); + } + else if (prior_dist == 5) // laplace + beta = prior_mean + prior_scale .* sqrt(2 * mix[1]) .* z_beta; + else if (prior_dist == 6) // lasso + beta = prior_mean + one_over_lambda[1] * prior_scale .* sqrt(2 * mix[1]) .* z_beta; + else if (prior_dist == 7) { // product_normal + int z_pos = 1; + for (k in 1:K) { + beta[k] = z_beta[z_pos]; + z_pos = z_pos + 1; + for (n in 2:num_normals[k]) { + beta[k] = beta[k] * z_beta[z_pos]; + z_pos = z_pos + 1; + } + beta[k] = beta[k] * prior_scale[k] ^ num_normals[k] + prior_mean[k]; + } + } } model { vector[N] eta; // linear predictor + spatial random effects @@ -172,7 +176,52 @@ model { else if (order == 2) target+= -0.5 * dot_product(phi, csr_matrix_times_vector(N, N, w, v, u, phi)); // priors on coefficients - #include "priors.stan" + // "priors.stan" + // Log-priors for coefficients + if (prior_dist == 1) target += normal_lpdf(z_beta | 0, 1); + else if (prior_dist == 2) target += normal_lpdf(z_beta | 0, 1); // Student t + else if (prior_dist == 3) { // hs + real log_half = -0.693147180559945286; + target += normal_lpdf(z_beta | 0, 1); + target += normal_lpdf(local[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); + target += normal_lpdf(global[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); + } + else if (prior_dist == 4) { // hs+ + real log_half = -0.693147180559945286; + target += normal_lpdf(z_beta | 0, 1); + target += normal_lpdf(local[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(local[2] | 0.5 * prior_df, 0.5 * prior_df); + target += normal_lpdf(local[3] | 0, 1) - log_half; + // unorthodox useage of prior_scale as another df hyperparameter + target += inv_gamma_lpdf(local[4] | 0.5 * prior_scale, 0.5 * prior_scale); + target += normal_lpdf(global[1] | 0, 1) - log_half; + target += inv_gamma_lpdf(global[2] | 0.5 * global_prior_df, 0.5 * global_prior_df); + } + else if (prior_dist == 5) { // laplace + target += normal_lpdf(z_beta | 0, 1); + target += exponential_lpdf(mix[1] | 1); + } + else if (prior_dist == 6) { // lasso + target += normal_lpdf(z_beta | 0, 1); + target += exponential_lpdf(mix[1] | 1); + target += chi_square_lpdf(one_over_lambda[1] | prior_df[1]); + } + else if (prior_dist == 7) { // product_normal + target += normal_lpdf(z_beta | 0, 1); + } + /* else prior_dist is 0 and nothing is added */ + + // Log-prior for intercept + if (has_intercept == 1) { + if (prior_dist_for_intercept == 1) // normal + target += normal_lpdf(gamma | prior_mean_for_intercept, prior_scale_for_intercept); + else if (prior_dist_for_intercept == 2) // student_t + target += student_t_lpdf(gamma | prior_df_for_intercept, prior_mean_for_intercept, + prior_scale_for_intercept); + /* else prior_dist is 0 and nothing is added */ + } // model specific priors if (model_type == 2) { target+= normal_lpdf(theta_raw | 0, 1); // unstructured (random) effect @@ -201,7 +250,17 @@ model { /* else prior_dist_tau is 0 and nothing is added */ // priors on auxilliary parameters (Log-priors) if (has_aux == 1) { - #include "priors_aux.stan" + // "priors_aux.stan" + // Log-priors + if (prior_dist_for_aux > 0 && prior_scale_for_aux > 0) { + real log_half = -0.693147180559945286; + if (prior_dist_for_aux == 1) + target += normal_lpdf(aux_unscaled | 0, 1) - log_half; + else if (prior_dist_for_aux == 2) + target += student_t_lpdf(aux_unscaled | prior_df_for_aux, 0, 1) - log_half; + else + target += exponential_lpdf(aux_unscaled | 1); + } } } generated quantities { From 2da6c7726c0fced98ad6da8e97be686791845d26 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 21 Jan 2018 19:34:44 -0500 Subject: [PATCH 38/59] get posterior predict to work with CAR models (hacky) --- R/posterior_predict.R | 44 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/R/posterior_predict.R b/R/posterior_predict.R index a5cb3cf8a..002456852 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -210,10 +210,17 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, ytilde <- do.call(fun, list(ytilde)) if (is_polr(object) && !is_scobit(object)) ytilde <- matrix(levels(get_y(object))[ytilde], nrow(ytilde), ncol(ytilde)) - - if (is.null(newdata)) colnames(ytilde) <- rownames(model.frame(object, m = m)) - else colnames(ytilde) <- rownames(newdata) - + + # fix me! + if (is(object, "car")) { + if (is.null(newdata)) colnames(ytilde) <- rownames(model.frame(object, m = NULL)) + else colnames(ytilde) <- rownames(newdata) + } + else { + if (is.null(newdata)) colnames(ytilde) <- rownames(model.frame(object, m = m)) + else colnames(ytilde) <- rownames(newdata) + } + # if function is called from posterior_traj then add mu as attribute fn <- tryCatch(sys.call(-3)[[1]], error = function(e) NULL) if (!is.null(fn) && grepl("posterior_traj", deparse(fn), fixed = TRUE)) @@ -394,27 +401,6 @@ pp_eta <- function(object, data, draws = NULL, m = NULL) { some_draws <- isTRUE(draws < S) if (some_draws) samp <- sample(S, draws) - if (is.null(data$Zt)) { - stanmat <- as.matrix.stanreg(object) - beta <- stanmat[, seq_len(ncol(x)), drop = FALSE] - if (some_draws) - beta <- beta[samp, , drop = FALSE] - if (is(object, "car")) { - psi_indx <- grep("psi", colnames(stanmat)) - psi <- stanmat[, psi_indx, drop = FALSE] - if (some_draws) - psi <- psi[samp, , drop = FALSE] - eta <- linear_predictor(beta, x, data$offset) + psi - } - else - eta <- linear_predictor(beta, x, data$offset) - } else { - stanmat <- as.matrix(object$stanfit) - beta <- stanmat[, seq_len(ncol(x)), drop = FALSE] - if (some_draws) - beta <- beta[samp, , drop = FALSE] - eta <- linear_predictor(beta, x, data$offset) - b <- stanmat[, grepl("^b\\[", colnames(stanmat)), drop = FALSE] if (is.stanmvreg(object)) { if (is.null(m)) STOP_arg_required_for_stanmvreg(m) M <- get_M(object) @@ -445,6 +431,13 @@ pp_eta <- function(object, data, draws = NULL, m = NULL) { else eta <- linkinv(object)(eta, data$arg1, data$arg2) eta <- t(eta) } + if (is(object, "car")) { + psi_indx <- grep("psi", colnames(stanmat)) + psi <- stanmat[, psi_indx, drop = FALSE] + if (some_draws) + psi <- psi[samp, , drop = FALSE] + eta <- eta + psi + } nlist(eta, stanmat) } @@ -493,4 +486,3 @@ pp_binomial_trials <- function(object, newdata = NULL, m = NULL) { return(rowSums(y)) rep(1, NROW(y)) } -} From 7ab7a9ad1e05508e60e8b9da9e6f510e77071173 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 29 Jan 2018 23:37:14 -0500 Subject: [PATCH 39/59] updating spatial docs --- R/stan_besag.R | 11 +++++++---- R/stan_bym.R | 14 +++++++++----- R/stan_bym2.R | 8 ++++++-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index 0172751c3..a84761479 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -68,6 +68,7 @@ #' p192-236. #' #' @examples +#' \dontrun{ #' ### Simulated Data on a Lattice #' #' data("lattice", package = "rstanarm") @@ -90,15 +91,17 @@ #' # simulate predictor/outcome #' x <- rnorm(nrow(W), 3, 1) #' phi <- grid_sim@data$gmrf -#' tau <- 1 -#' y <- rnorm(nrow(W), 0 + 0.4*x + phi*tau, 1) +#' tau <- 2 +#' y <- rnorm(nrow(W), 0.5 + 3*x + phi*tau, 1) #' #' # fit the model -#' fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = data.frame(y=y,x=x), -#' W = W, iter = 300, chains = 4) +#' fit_besag <- stan_besag(y ~ 1 + x, data = data.frame(y=y,x=x), family = gaussian(), +#' W = W, iter = 500, chains = 4) #' fit_besag #' pp_check(fit_besag) +#'} #' + stan_besag <- function(formula, family = NULL, data, diff --git a/R/stan_bym.R b/R/stan_bym.R index 9c6426a21..ad8bcb5a7 100644 --- a/R/stan_bym.R +++ b/R/stan_bym.R @@ -70,6 +70,7 @@ #' Statistical Mathematics. Vol. 43, No. 01, p1-20. #' #' @examples +#' \dontrun{ #' ### Simulated Data on a Lattice #' #' data("lattice", package = "rstanarm") @@ -94,15 +95,18 @@ #' phi <- grid_sim@data$gmrf #' theta <- rnorm(nrow(W), 0, 1) #' tau <- 1 -#' rho <- 1 +#' rho <- 2 #' spatial_data <- data.frame(x) -#' y <- rnorm(nrow(W), 0 + 0.4*x + phi*rho + theta*tau, 1) +#' y <- rnorm(nrow(W), 0.5 + 3*x + phi*rho + theta*tau, 1) #' #' # fit the model -#' fit_bym <- stan_bym(y ~ 1 + x +, data = data.frame(y=y,x=x), -#' W = W, iter = 300, chains = 4) +#' fit_bym <- stan_bym(y ~ 1 + x, data = data.frame(y=y,x=x), +#' W = W, iter = 500) #' fit_bym -#' pp_check(fit_besag) +#' pp_check(fit_bym) +#' } +#' + stan_bym <- function(formula, family = gaussian(), data, diff --git a/R/stan_bym2.R b/R/stan_bym2.R index b80cde5be..c9e45ae91 100644 --- a/R/stan_bym2.R +++ b/R/stan_bym2.R @@ -78,6 +78,7 @@ #' constructing priors. arXiv preprint arXiv:1403.4630. #' #' @examples +#' \dontrun{ #' ### Simulated Data on a Lattice #' #' data("lattice", package = "rstanarm") @@ -108,9 +109,12 @@ #' #' # fit the model #' fit_bym2 <- stan_bym2(y ~ 1 + x, data = data.frame(y=y,x=x), -#' W = W, iter = 300, chains = 4) +#' W = W, iter = 1e3, chains = 4, cores = 2) #' fit_bym2 -#' pp_check(fit_besag) +#' pp_check(fit_bym2) +#' } +#' + stan_bym2 <- function(formula, family = gaussian(), data, From a641852e6c7f56e1e470165ec2e606c831839e84 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 4 Sep 2018 23:07:50 -0400 Subject: [PATCH 40/59] return error when using loo on CAR models (tentative) --- R/loo.R | 2 ++ R/posterior_predict.R | 4 ++-- vignettes/spatial.Rmd | 17 +---------------- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/R/loo.R b/R/loo.R index 0cb38af52..7e6a999b2 100644 --- a/R/loo.R +++ b/R/loo.R @@ -133,6 +133,8 @@ loo.stanreg <- function(x, ..., k_threshold = NULL) { STOP_sampling_only("loo") if (model_has_weights(x)) recommend_exact_loo(reason = "model has weights") + if (is(x,"car")) + stop("Currently, the loo method is not supported for CAR spatial models.", call. = FALSE) user_threshold <- !is.null(k_threshold) if (user_threshold) { diff --git a/R/posterior_predict.R b/R/posterior_predict.R index 002456852..81e533e2d 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -210,10 +210,10 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, ytilde <- do.call(fun, list(ytilde)) if (is_polr(object) && !is_scobit(object)) ytilde <- matrix(levels(get_y(object))[ytilde], nrow(ytilde), ncol(ytilde)) - + # fix me! if (is(object, "car")) { - if (is.null(newdata)) colnames(ytilde) <- rownames(model.frame(object, m = NULL)) + if (is.null(newdata)) colnames(ytilde) <- rownames(model.frame(object)) else colnames(ytilde) <- rownames(newdata) } else { diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index 967069e39..9f2d33a56 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -196,22 +196,7 @@ Alternatively we can look at the conventional one-dimensional posterior predicti pp_check(fit_besag) ``` -We can also compare the model's predictive performance using the [loo](http://mc-stan.org/loo) package. - -```{r loo-besag, results='hide'} -library(loo) -loo_besag <- loo(fit_besag) -loo_besag_bad <- loo(fit_besag_bad) -print(loo_besag) -print(loo_besag_bad) -``` - -```{r loo-besag-compare} -compare(loo_besag, loo_besag_bad) -``` - - -The difference between these two models is negative indicating the correct model has higher predictive accuracy. +In order to compare the predictive performance between the models we need to use the [loo](http://mc-stan.org/loo) package. Currently, however, this is not supported for CAR spatial models. ## Smoothing the Spatial Random Walk From 5a1173e7ef363d68f94bbe7dc2f67f0895daaf0f Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Wed, 5 Sep 2018 01:48:08 -0400 Subject: [PATCH 41/59] drop loo tests --- R/stan_spatial.fit.R | 2 +- tests/testthat/test_stan_besag.R | 52 +++++++++++++++++--------------- tests/testthat/test_stan_bym.R | 48 ++++++++++++++--------------- tests/testthat/test_stan_bym2.R | 48 ++++++++++++++--------------- 4 files changed, 76 insertions(+), 74 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index a68080372..debed6e16 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -272,7 +272,7 @@ stan_spatial.fit <- function(x, y, w, global_prior_scale, global_prior_scale_for_intercept, num_normals = if(prior_dist == 7) as.integer(prior_df) else integer(0)) - + if (stan_function == "stan_bym2") standata$scaling_factor <- create_scaling_factor(standata) else diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index bbbc32bdc..61b92d877 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -25,8 +25,10 @@ ITER <- 50 CHAINS <- 2 context("stan_besag") +# for line-byline testing only # source(paste0("tests/testthat/",(file.path("helpers", "expect_stanreg.R")))) # source(paste0("tests/testthat/",(file.path("helpers", "SW.R")))) +# for full package testing source(file.path("helpers", "expect_stanreg.R")) source(file.path("helpers", "SW.R")) @@ -59,23 +61,23 @@ SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma( W = W, iter = 500, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) -test_that("stan_besag estimates match INLA", { - inla_gauss_est <- c(-0.0475, 0.4329, 1/0.8277, 1/0.9830) - inla_binom_est <- c(-1.9444, 0.3340, 1/0.4229) - inla_pois_est <- c(0.7801, 0.4366, 1/0.3448) - inla_nb_est <- c(0.8053, 0.4362, 1/0.3574, 48.6003) - inla_gamma_est <- c(0.8119, -1.3407, 1/0.559, 1/1.106) - besag_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) - besag_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) - besag_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) - besag_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) - besag_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) - expect_equal(besag_gauss, inla_gauss_est, tol = 0.2) - expect_equal(besag_binom, inla_binom_est, tol = 0.2) - expect_equal(besag_pois, inla_pois_est, tol = 0.2) - expect_equal(besag_nb2, inla_nb_est, tol = 0.2) - expect_equal(besag_gamma, inla_gamma_est, tol = 0.2) -}) +# test_that("stan_besag estimates match INLA", { +# inla_gauss_est <- c(-0.0475, 0.4329, 1/0.8277, 1/0.9830) +# inla_binom_est <- c(-1.9444, 0.3340, 1/0.4229) +# inla_pois_est <- c(0.7801, 0.4366, 1/0.3448) +# inla_nb_est <- c(0.8053, 0.4362, 1/0.3574, 48.6003) +# inla_gamma_est <- c(0.8119, -1.3407, 1/0.559, 1/1.106) +# besag_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) +# besag_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) +# besag_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) +# besag_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) +# besag_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) +# expect_equal(besag_gauss, inla_gauss_est, tol = 0.2) +# expect_equal(besag_binom, inla_binom_est, tol = 0.2) +# expect_equal(besag_pois, inla_pois_est, tol = 0.2) +# expect_equal(besag_nb2, inla_nb_est, tol = 0.2) +# expect_equal(besag_gamma, inla_gamma_est, tol = 0.2) +# }) # test family/link combinations test_that("family = 'gaussian' works", { @@ -152,7 +154,7 @@ test_that("family = 'Gamma' works", { # test QR test_that("QR errors when number of predictors is <= 1", { expect_error( - stan_besag(y_gauss ~ x, data = spatial_data, family = gaussian(), seed = SEED, QR = TRUE), + stan_besag(y_gauss ~ x, data = spatial_data, W = W, family = gaussian(), seed = SEED, QR = TRUE), "'QR' can only be specified when there are multiple predictors" ) }) @@ -169,13 +171,13 @@ test_that("stan_besag errors with algorithm = 'optimizing'", { "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) -test_that("loo/waic for stan_besag works", { - loo(fit_gauss) - loo(fit_binom) - loo(fit_pois) - loo(fit_nb2) - loo(fit_gamma) -}) +# test_that("loo/waic for stan_besag works", { +# loo(fit_gauss) +# loo(fit_binom) +# loo(fit_pois) +# loo(fit_nb2) +# loo(fit_gamma) +# }) test_that("posterior_predict works for stan_besag", { preds_gauss <- posterior_predict(fit_gauss) diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R index 37bc4ee44..b85044290 100644 --- a/tests/testthat/test_stan_bym.R +++ b/tests/testthat/test_stan_bym.R @@ -64,23 +64,23 @@ SW(fit_gamma <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(li W = W, iter = 500, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) -test_that("stan_bym estimates match INLA", { - inla_gauss_est <- c(-0.0469, 0.4327, 1/0.8603, 1/1.6159, 1/2.5314) - inla_binom_est <- c(-1.9449, 0.3339, 1/0.5624, 1/13.5187) - inla_pois_est <- c(0.7792, 0.4365, 1/0.3874, 1/52.7799) - inla_nb_est <- c(0.8008, 0.4366, 1/0.3806, 1/66.9760, 35.4347) - inla_gamma_est <- c(0.7881, -1.3443, 1/0.6516, 1/24.4265, 1/1.1556) - bym_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) - bym_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) - bym_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) - bym_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) - bym_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) - expect_equal(bym_gauss, inla_gauss_est, tol = 0.2) - expect_equal(bym_binom, inla_binom_est, tol = 0.2) - expect_equal(bym_pois, inla_pois_est, tol = 0.2) - expect_equal(bym_nb2, inla_nb_est, tol = 0.2) - expect_equal(bym_gamma, inla_gamma_est, tol = 0.2) -}) +# test_that("stan_bym estimates match INLA", { +# inla_gauss_est <- c(-0.0469, 0.4327, 1/0.8603, 1/1.6159, 1/2.5314) +# inla_binom_est <- c(-1.9449, 0.3339, 1/0.5624, 1/13.5187) +# inla_pois_est <- c(0.7792, 0.4365, 1/0.3874, 1/52.7799) +# inla_nb_est <- c(0.8008, 0.4366, 1/0.3806, 1/66.9760, 35.4347) +# inla_gamma_est <- c(0.7881, -1.3443, 1/0.6516, 1/24.4265, 1/1.1556) +# bym_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) +# bym_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) +# bym_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) +# bym_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) +# bym_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) +# expect_equal(bym_gauss, inla_gauss_est, tol = 0.2) +# expect_equal(bym_binom, inla_binom_est, tol = 0.2) +# expect_equal(bym_pois, inla_pois_est, tol = 0.2) +# expect_equal(bym_nb2, inla_nb_est, tol = 0.2) +# expect_equal(bym_gamma, inla_gamma_est, tol = 0.2) +# }) # test family/link combinations test_that("family = 'gaussian' works", { @@ -174,13 +174,13 @@ test_that("stan_bym errors with algorithm = 'optimizing'", { "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) -test_that("loo/waic for stan_bym works", { - loo(fit_gauss) - loo(fit_binom) - loo(fit_pois) - loo(fit_nb2) - loo(fit_gamma) -}) +# test_that("loo/waic for stan_bym works", { +# loo(fit_gauss) +# loo(fit_binom) +# loo(fit_pois) +# loo(fit_nb2) +# loo(fit_gamma) +# }) test_that("posterior_predict works for stan_bym", { preds_gauss <- posterior_predict(fit_gauss) diff --git a/tests/testthat/test_stan_bym2.R b/tests/testthat/test_stan_bym2.R index 1054e4990..5a1c6c281 100644 --- a/tests/testthat/test_stan_bym2.R +++ b/tests/testthat/test_stan_bym2.R @@ -64,23 +64,23 @@ SW(fit_gamma <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(l W = W, iter = 500, chains = 4)) # compare answers with INLA (NB2 reciprocal_dispersion param fails!) -test_that("stan_bym2 estimates match INLA", { - inla_gauss_est <- c(-0.0499, 0.4337, 0.4048, 1/1.0845, 1/2.1234) - inla_binom_est <- c(-1.9432, 0.3338, 0.7963, 1/1.6385) - inla_pois_est <- c(0.7813, 0.4361, 0.9127, 1/1.3033) - inla_nb_est <- c(0.8017, 0.4363, 0.9136, 1/1.3051, 117.9266) - inla_gamma_est <- c(0.7968, -1.3430, 0.807, 1/1.909, 1/1.140) - bym2_gauss <- unname(fit_gauss$stan_summary[1:5,"mean"]) - bym2_binom <- unname(fit_binom$stan_summary[1:4,"mean"]) - bym2_pois <- unname(fit_pois$stan_summary[1:4,"mean"]) - bym2_nb2 <- unname(fit_nb2$stan_summary[1:5,"mean"]) - bym2_gamma <- unname(fit_gamma$stan_summary[1:5,"mean"]) - expect_equal(bym2_gauss, inla_gauss_est, tol = 0.2) - expect_equal(bym2_binom, inla_binom_est, tol = 0.2) - expect_equal(bym2_pois, inla_pois_est, tol = 0.2) - expect_equal(bym2_nb2, inla_nb_est, tol = 0.2) - expect_equal(bym2_gamma, inla_gamma_est, tol = 0.2) -}) +# test_that("stan_bym2 estimates match INLA", { +# inla_gauss_est <- c(-0.0499, 0.4337, 0.4048, 1/1.0845, 1/2.1234) +# inla_binom_est <- c(-1.9432, 0.3338, 0.7963, 1/1.6385) +# inla_pois_est <- c(0.7813, 0.4361, 0.9127, 1/1.3033) +# inla_nb_est <- c(0.8017, 0.4363, 0.9136, 1/1.3051, 117.9266) +# inla_gamma_est <- c(0.7968, -1.3430, 0.807, 1/1.909, 1/1.140) +# bym2_gauss <- unname(fit_gauss$stan_summary[1:5,"mean"]) +# bym2_binom <- unname(fit_binom$stan_summary[1:4,"mean"]) +# bym2_pois <- unname(fit_pois$stan_summary[1:4,"mean"]) +# bym2_nb2 <- unname(fit_nb2$stan_summary[1:5,"mean"]) +# bym2_gamma <- unname(fit_gamma$stan_summary[1:5,"mean"]) +# expect_equal(bym2_gauss, inla_gauss_est, tol = 0.2) +# expect_equal(bym2_binom, inla_binom_est, tol = 0.2) +# expect_equal(bym2_pois, inla_pois_est, tol = 0.2) +# expect_equal(bym2_nb2, inla_nb_est, tol = 0.2) +# expect_equal(bym2_gamma, inla_gamma_est, tol = 0.2) +# }) # test family/link combinations test_that("family = 'gaussian' works", { @@ -174,13 +174,13 @@ test_that("stan_bym2 errors with algorithm = 'optimizing'", { "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) -test_that("loo/waic for stan_bym2 works", { - loo(fit_gauss) - loo(fit_binom) - loo(fit_pois) - loo(fit_nb2) - loo(fit_gamma) -}) +# test_that("loo/waic for stan_bym2 works", { +# loo(fit_gauss) +# loo(fit_binom) +# loo(fit_pois) +# loo(fit_nb2) +# loo(fit_gamma) +# }) test_that("posterior_predict works for stan_bym2", { preds_gauss <- posterior_predict(fit_gauss) From 4824fd3df40ccacfe1f90aafd6db3bcdf329fad5 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Fri, 7 Sep 2018 10:13:06 -0400 Subject: [PATCH 42/59] modified namespace --- NAMESPACE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index dc47eff7a..8f1042f8f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -29,7 +29,6 @@ S3method(launch_shinystan,stanreg) S3method(log_lik,stanjm) S3method(log_lik,stanmvreg) S3method(log_lik,stanreg) -S3method(loo,stanreg) S3method(loo_linpred,stanreg) S3method(loo_model_weights,stanreg_list) S3method(loo_predict,stanreg) @@ -105,6 +104,7 @@ export(launch_shinystan) export(lkj) export(log_lik) export(loo) +export(loo.stanreg) export(loo_linpred) export(loo_model_weights) export(loo_predict) From 3f52c0cf1ed0bed940d66ee960ed6c0b233c79c7 Mon Sep 17 00:00:00 2001 From: Ben Goodrich Date: Fri, 7 Sep 2018 11:27:02 -0400 Subject: [PATCH 43/59] spatial.Rmd: fix encoding --- cleanup | 2 +- vignettes/spatial.Rmd | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cleanup b/cleanup index 5f49d7c23..b1e2a1e77 100755 --- a/cleanup +++ b/cleanup @@ -1,5 +1,5 @@ #!/bin/sh -e # Note to Windows users: This is not actually platform specific. -"${R_HOME}/bin/R" --vanilla --slave -e 'roxygen2::roxygenize(clean = TRUE)' +# "${R_HOME}/bin/R" --vanilla --slave -e 'roxygen2::roxygenize(clean = TRUE)' exit $? diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index 9f2d33a56..ba83f2ca4 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -10,7 +10,8 @@ params: --- ```{r, child="children/SETTINGS-knitr.txt"} ``` From b498fc0ace9d153a24524a9d693ae2efced8a7f0 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sat, 8 Sep 2018 23:49:02 -0400 Subject: [PATCH 44/59] making CAR family func consistent with other stan models --- R/stan_spatial.fit.R | 8 ++++---- src/stan_files/spatial.stan | 28 +++++++++++++++++----------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index debed6e16..c42722032 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -55,10 +55,10 @@ stan_spatial.fit <- function(x, y, w, family_num <- switch(family$family, gaussian = 1, - poisson = 2, - neg_binomial_2 = 3, - binomial = 4, - Gamma = 5) + poisson = 6, + neg_binomial_2 = 7, + binomial = 5, + Gamma = 2) # for when consistent-family-numbers gets merged # family_num <- switch(family$family, diff --git a/src/stan_files/spatial.stan b/src/stan_files/spatial.stan index fdf4532ee..7331155b1 100644 --- a/src/stan_files/spatial.stan +++ b/src/stan_files/spatial.stan @@ -11,14 +11,14 @@ data { int N; // number of regions int K; // number of predictors (inc intercept) matrix[N,K] X; // model matrix - int family; + int family; // 1 gaussian, 2 poisson, 3 neg_binomial, 4 binomial, 5 gamma int link; int is_continuous; int has_aux; int model_type; // Besag = 1; BYM = 2; BYM2 = 3 int has_intercept; vector[K] xbar; - int trials[family == 4 ? N : 0]; + int trials[family == 5 ? N : 0]; int y_int[is_continuous == 1 ? 0 : N]; vector[is_continuous == 1 ? N : 0] y_real; // pairwise difference version of CAR @@ -146,8 +146,14 @@ transformed parameters { model { vector[N] eta; // linear predictor + spatial random effects // deal with intercept - if (has_intercept == 1) + if (has_intercept == 1) { eta = gamma[1] + X * beta + psi; + // if ((family == 5 & link == 4) || (family == 7 & link == 2)) // binomial and neg_binomial + // eta -= max(eta); + // else if ((family == 6 & link = 2) || (family == 2 & (link == 1 | link == 3))) // poisson and gamma + // eta -= min(eta); + // else if () + } else eta = X * beta + psi; // likelihoods @@ -155,19 +161,19 @@ model { eta = linkinv_gauss(eta, link); target+= normal_lpdf(y_real | eta, aux); } - else if (family == 2) { + else if (family == 6) { eta = linkinv_count(eta, link); target+= poisson_lpmf(y_int | eta); } - else if (family == 3) { + else if (family == 7) { eta = linkinv_count(eta, link); target += neg_binomial_2_lpmf(y_int | eta, aux); } - else if (family == 4) { + else if (family == 5) { eta = linkinv_binom(eta, link); target+= binomial_lpmf(y_int | trials, eta); } - else if (family == 5) { + else if (family == 2) { target += GammaReg(y_real, eta, aux, link, sum_log_y); } // prior on spatial parameter vector (GMRF) @@ -280,7 +286,7 @@ generated quantities { eta = linkinv_gauss(eta, link); for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], aux); } - else if (family == 2) { + else if (family == 6) { eta = linkinv_count(eta, link); for (n in 1:N) { if (eta[n] < poisson_max) @@ -289,7 +295,7 @@ generated quantities { mean_PPD = mean_PPD + normal_rng(eta[n], sqrt(eta[n])); } } - else if (family == 3) { + else if (family == 7) { eta = linkinv_count(eta, link); for (n in 1:N) { real gamma_temp; @@ -300,11 +306,11 @@ generated quantities { else mean_PPD = mean_PPD + normal_rng(gamma_temp, sqrt(gamma_temp)); } } - else if (family == 4) { + else if (family == 5) { eta = linkinv_binom(eta, link); for (n in 1:N) mean_PPD = mean_PPD + binomial_rng(trials[n], inv_logit(eta[n])); } - else if (family == 5) { + else if (family == 2) { if (link > 1) eta = linkinv_gamma(eta, link); for (n in 1:N) mean_PPD = mean_PPD + gamma_rng(aux, aux / eta[n]); } From 19a809dc70f6e0721a8a4e6fe5270b128707e1d8 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 9 Sep 2018 22:13:02 -0400 Subject: [PATCH 45/59] fixing awkward family/link pairs; neg_bin(link=identity) still broken --- .../functions/common_functions.stan | 56 ++++++++++--------- src/stan_files/spatial.stan | 44 ++++++++------- 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/src/stan_files/functions/common_functions.stan b/src/stan_files/functions/common_functions.stan index b288c1902..6247a8ecd 100644 --- a/src/stan_files/functions/common_functions.stan +++ b/src/stan_files/functions/common_functions.stan @@ -1,13 +1,13 @@ /* for multiple .stan files */ - - /** + + /** * Create group-specific block-diagonal Cholesky factor, see section 2 of * https://cran.r-project.org/web/packages/lme4/vignettes/lmer.pdf - * @param len_theta_L An integer indicating the length of returned vector, + * @param len_theta_L An integer indicating the length of returned vector, * which lme4 denotes as m * @param p An integer array with the number variables on the LHS of each | * @param dispersion Scalar standard deviation of the errors, calles sigma by lme4 - * @param tau Vector of scale parameters whose squares are proportional to the + * @param tau Vector of scale parameters whose squares are proportional to the * traces of the relative covariance matrices of the group-specific terms * @param scale Vector of prior scales that are multiplied by elements of tau * @param zeta Vector of positive parameters that are normalized into simplexes @@ -26,33 +26,33 @@ int theta_L_mark = 1; // each of these is a diagonal block of the implicit Cholesky factor - for (i in 1:size(p)) { + for (i in 1:size(p)) { int nc = p[i]; if (nc == 1) { // "block" is just a standard deviation theta_L[theta_L_mark] = tau[i] * scale[i] * dispersion; // unlike lme4, theta[theta_L_mark] includes the dispersion term in it theta_L_mark += 1; } - else { // block is lower-triangular - matrix[nc,nc] T_i; + else { // block is lower-triangular + matrix[nc,nc] T_i; real std_dev; real T21; real trace_T_i = square(tau[i] * scale[i] * dispersion) * nc; vector[nc] pi = segment(zeta, zeta_mark, nc); // gamma(zeta | shape, 1) pi /= sum(pi); // thus dirichlet(pi | shape) - + // unlike lme4, T_i includes the dispersion term in it zeta_mark += nc; std_dev = sqrt(pi[1] * trace_T_i); T_i[1,1] = std_dev; - + // Put a correlation into T_i[2,1] and scale by std_dev std_dev = sqrt(pi[2] * trace_T_i); T21 = 2.0 * rho[rho_mark] - 1.0; rho_mark += 1; T_i[2,2] = std_dev * sqrt(1.0 - square(T21)); T_i[2,1] = std_dev * T21; - + for (r in 2:(nc - 1)) { // scaled onion method to fill T_i int rp1 = r + 1; vector[r] T_row = segment(z_T, z_T_mark, r); @@ -63,7 +63,7 @@ T_i[rp1,rp1] = sqrt(1.0 - rho[rho_mark]) * std_dev; rho_mark += 1; } - + // now vech T_i for (c in 1:nc) for (r in c:nc) { theta_L[theta_L_mark] = T_i[r,c]; @@ -73,15 +73,15 @@ } return theta_L; } - - /** + + /** * Create group-specific coefficients, see section 2 of * https://cran.r-project.org/web/packages/lme4/vignettes/lmer.pdf * * @param z_b Vector whose elements are iid normal(0,sigma) a priori * @param theta Vector with covariance parameters as defined in lme4 * @param p An integer array with the number variables on the LHS of each | - * @param l An integer array with the number of levels for the factor(s) on + * @param l An integer array with the number of levels for the factor(s) on * the RHS of each | * @return A vector of group-specific coefficients */ @@ -93,7 +93,7 @@ int nc = p[i]; if (nc == 1) { real theta_L_start = theta_L[theta_L_mark]; - for (s in b_mark:(b_mark + l[i] - 1)) + for (s in b_mark:(b_mark + l[i] - 1)) b[s] = theta_L_start * z_b[s]; b_mark += l[i]; theta_L_mark += 1; @@ -119,7 +119,7 @@ return b; } - /** + /** * Prior on group-specific parameters * * @param z_b A vector of primitive coefficients @@ -160,7 +160,7 @@ target += gamma_lpdf(tau | shape, 1); return target(); } - + /** * Hierarchical shrinkage parameterization * @@ -172,7 +172,7 @@ * @param c2 A positive real number * @return A vector of coefficientes */ - vector hs_prior(vector z_beta, real[] global, vector[] local, + vector hs_prior(vector z_beta, real[] global, vector[] local, real global_prior_scale, real error_scale, real c2) { int K = rows(z_beta); vector[K] lambda = local[1] .* sqrt(local[2]); @@ -182,7 +182,7 @@ return z_beta .* lambda_tilde * tau; } - /** + /** * Hierarchical shrinkage plus parameterization * * @param z_beta A vector of primitive coefficients @@ -193,19 +193,19 @@ * @param c2 A positive real number * @return A vector of coefficientes */ - vector hsplus_prior(vector z_beta, real[] global, vector[] local, + vector hsplus_prior(vector z_beta, real[] global, vector[] local, real global_prior_scale, real error_scale, real c2) { int K = rows(z_beta); vector[K] lambda = local[1] .* sqrt(local[2]); vector[K] eta = local[3] .* sqrt(local[4]); real tau = global[1] * sqrt(global[2]) * global_prior_scale * error_scale; vector[K] lambda_eta2 = square(lambda .* eta); - vector[K] lambda_tilde = sqrt( c2 * lambda_eta2 ./ + vector[K] lambda_tilde = sqrt( c2 * lambda_eta2 ./ ( c2 + square(tau) * lambda_eta2) ); return z_beta .* lambda_tilde * tau; } - - /** + + /** * Cornish-Fisher expansion for standard normal to Student t * * See result 26.7.5 of @@ -229,7 +229,7 @@ + (79 * z9 + 776 * z7 + 1482 * z5 - 1920 * z3 - 945 * z) / (92160 * df4); } - /** + /** * Return two-dimensional array of group membership * * @param N An integer indicating the number of observations @@ -247,7 +247,7 @@ return V; } - /** + /** * faster version of csr_matrix_times_vector * declared here and defined in C++ * @@ -259,7 +259,7 @@ * @param b Vector that is multiplied from the left by the CSR matrix * @return A vector that is the product of the CSR matrix and b */ - vector csr_matrix_times_vector2(int m, int n, vector w, + vector csr_matrix_times_vector2(int m, int n, vector w, int[] v, int[] u, vector b); /** @@ -283,6 +283,8 @@ if (link == 2) return negative_infinity(); // log return 0; } + if (family == 6 && link == 2) return 0; // poisson(link="idenity") + if (family == 2 && (link == 1 || link == 3)) return 0; // gamma(link="idenity|inverse") return negative_infinity(); } @@ -295,5 +297,7 @@ */ real make_upper(int family, int link) { if (family == 4 && link == 5) return 0; + if (family == 5 && link == 4) return 0; // binomial(link="log") + if (family == 7 && link == 2) return 0; // neg_binomial(link="log") return positive_infinity(); } diff --git a/src/stan_files/spatial.stan b/src/stan_files/spatial.stan index 7331155b1..52c179c1a 100644 --- a/src/stan_files/spatial.stan +++ b/src/stan_files/spatial.stan @@ -70,6 +70,7 @@ transformed data { } parameters { real gamma[has_intercept]; + // real gamma[has_intercept]; vector[K] z_beta; vector[model_type == 1? 0 : N] theta_raw; vector[N-1] phi_raw; @@ -147,12 +148,12 @@ model { vector[N] eta; // linear predictor + spatial random effects // deal with intercept if (has_intercept == 1) { - eta = gamma[1] + X * beta + psi; - // if ((family == 5 & link == 4) || (family == 7 & link == 2)) // binomial and neg_binomial - // eta -= max(eta); - // else if ((family == 6 & link = 2) || (family == 2 & (link == 1 | link == 3))) // poisson and gamma - // eta -= min(eta); - // else if () + eta = X * beta + psi; + if ((family == 5 && link == 4) || (family == 7 && link == 2)) // binomial and neg_binomial + eta -= max(eta); + else if ((family == 6 && link == 2) || (family == 2 && (link == 1 || link == 3))) // poisson and gamma + eta -= min(eta); + eta += gamma[1]; } else eta = X * beta + psi; @@ -272,27 +273,30 @@ model { generated quantities { real mean_PPD = 0; real alpha[has_intercept]; - if (has_intercept) - alpha[1] = gamma[1] - dot_product(beta, xbar); { + vector[N] lp_tf; vector[N] eta; + eta = X * beta + psi; if (has_intercept == 1) { - eta = alpha[1] + X * beta + psi; - } - else { - eta = X * beta + psi; + alpha[1] = gamma[1] - dot_product(beta, xbar); + if ((family == 5 && link == 4) || (family == 7 && link == 2)) // binomial and neg_binomial + eta -= max(eta); + else if ((family == 6 && link == 2) || (family == 2 && (link == 1 || link == 3))) // poisson and gamma + eta -= min(eta); + eta += gamma[1]; } if (family == 1) { eta = linkinv_gauss(eta, link); - for (n in 1:N) mean_PPD = mean_PPD + normal_rng(eta[n], aux); + for (n in 1:N) mean_PPD += normal_rng(eta[n], aux); } else if (family == 6) { eta = linkinv_count(eta, link); + if (link == 2) for (n in 1:N) { if (eta[n] < poisson_max) - mean_PPD = mean_PPD + poisson_rng(eta[n]); + mean_PPD += poisson_rng(eta[n]); else - mean_PPD = mean_PPD + normal_rng(eta[n], sqrt(eta[n])); + mean_PPD += normal_rng(eta[n], sqrt(eta[n])); } } else if (family == 7) { @@ -302,17 +306,17 @@ generated quantities { if (is_inf(aux)) gamma_temp = eta[n]; else gamma_temp = gamma_rng(aux, aux / eta[n]); if (gamma_temp < poisson_max) - mean_PPD = mean_PPD + poisson_rng(gamma_temp); - else mean_PPD = mean_PPD + normal_rng(gamma_temp, sqrt(gamma_temp)); + mean_PPD += poisson_rng(gamma_temp); + else mean_PPD += normal_rng(gamma_temp, sqrt(gamma_temp)); } } else if (family == 5) { - eta = linkinv_binom(eta, link); - for (n in 1:N) mean_PPD = mean_PPD + binomial_rng(trials[n], inv_logit(eta[n])); + lp_tf = linkinv_binom(eta, link); + for (n in 1:N) mean_PPD += binomial_rng(trials[n], lp_tf[n]); } else if (family == 2) { if (link > 1) eta = linkinv_gamma(eta, link); - for (n in 1:N) mean_PPD = mean_PPD + gamma_rng(aux, aux / eta[n]); + for (n in 1:N) mean_PPD += gamma_rng(aux, aux / eta[n]); } } mean_PPD = mean_PPD / N; From a56454856c6143e72137e169b7632e9cfdb1dbf7 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 11 Sep 2018 23:17:27 -0400 Subject: [PATCH 46/59] fix count family/link issues in spatial.stan --- src/stan_files/functions/common_functions.stan | 4 ++-- src/stan_files/spatial.stan | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/stan_files/functions/common_functions.stan b/src/stan_files/functions/common_functions.stan index 6247a8ecd..2e38a19d6 100644 --- a/src/stan_files/functions/common_functions.stan +++ b/src/stan_files/functions/common_functions.stan @@ -283,7 +283,8 @@ if (link == 2) return negative_infinity(); // log return 0; } - if (family == 6 && link == 2) return 0; // poisson(link="idenity") + if (family == 6 && link != 1) return 0; // poisson + if (family == 7 && link != 1) return 0; // neg_binomial_2 if (family == 2 && (link == 1 || link == 3)) return 0; // gamma(link="idenity|inverse") return negative_infinity(); } @@ -298,6 +299,5 @@ real make_upper(int family, int link) { if (family == 4 && link == 5) return 0; if (family == 5 && link == 4) return 0; // binomial(link="log") - if (family == 7 && link == 2) return 0; // neg_binomial(link="log") return positive_infinity(); } diff --git a/src/stan_files/spatial.stan b/src/stan_files/spatial.stan index 52c179c1a..384e863a2 100644 --- a/src/stan_files/spatial.stan +++ b/src/stan_files/spatial.stan @@ -149,9 +149,11 @@ model { // deal with intercept if (has_intercept == 1) { eta = X * beta + psi; - if ((family == 5 && link == 4) || (family == 7 && link == 2)) // binomial and neg_binomial + if ((family == 5 && link == 4)) // binomial eta -= max(eta); - else if ((family == 6 && link == 2) || (family == 2 && (link == 1 || link == 3))) // poisson and gamma + else if ((family == 6 && link != 1) || + (family == 7 && link != 1) || + (family == 2 && (link == 1 || link == 3))) // poisson, neg_binomial_2, and gamma eta -= min(eta); eta += gamma[1]; } @@ -279,10 +281,16 @@ generated quantities { eta = X * beta + psi; if (has_intercept == 1) { alpha[1] = gamma[1] - dot_product(beta, xbar); - if ((family == 5 && link == 4) || (family == 7 && link == 2)) // binomial and neg_binomial + if ((family == 5 && link == 4)) { // binomial eta -= max(eta); - else if ((family == 6 && link == 2) || (family == 2 && (link == 1 || link == 3))) // poisson and gamma + alpha[1] -= max(eta); + } + else if ((family == 6 && link != 1) || + (family == 7 && link != 1) || + (family == 2 && (link == 1 || link == 3))) {// poisson, neg_binomial_2, and gamma eta -= min(eta); + alpha[1] -= min(eta); + } eta += gamma[1]; } if (family == 1) { From 8fe3ffd8585f823b8fe2689fa3ae1aa2b5a7af9c Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 21 Oct 2018 19:22:53 -0400 Subject: [PATCH 47/59] cleanup loo --- R/log_lik.R | 5 +++-- R/loo.R | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/R/log_lik.R b/R/log_lik.R index 4112f8ce5..98e05961a 100644 --- a/R/log_lik.R +++ b/R/log_lik.R @@ -360,7 +360,8 @@ ll_args.stanreg <- function(object, newdata = NULL, offset = NULL, m = NULL, draws$beta <- cbind(draws$beta, b) } if (is(object, "car")) { - psi_indx <- grep("psi", colnames(stanmat)) + browser() + psi_indx <- grep("^psi\\[[[:digit:]]+\\]", colnames(stanmat)) psi <- stanmat[, psi_indx, drop = FALSE] data$psi <- t(psi) out <- nlist(data, draws, S = NROW(draws$beta), N = nrow(data)) @@ -407,7 +408,7 @@ ll_args.stanreg <- function(object, newdata = NULL, offset = NULL, m = NULL, } .mu <- function(data, draws) { eta <- as.vector(linear_predictor(draws$beta, .xdata(data), data$offset)) - if (!is.null(data$psi)) + if (!is.null(data$psi)) # for CAR models (adding spatial effect) eta <- eta + as.vector(data$psi) draws$f$linkinv(eta) } diff --git a/R/loo.R b/R/loo.R index 481936624..7046eb225 100644 --- a/R/loo.R +++ b/R/loo.R @@ -181,8 +181,6 @@ loo.stanreg <- STOP_sampling_only("loo") if (model_has_weights(x)) recommend_exact_loo(reason = "model has weights") - if (is(x,"car")) - stop("Currently, the loo method is not supported for CAR spatial models.", call. = FALSE) user_threshold <- !is.null(k_threshold) if (user_threshold) { From 1556945d59cc2aebe7fa19484bf01245917e2563 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sun, 21 Oct 2018 21:07:34 -0400 Subject: [PATCH 48/59] revise CAR tests --- R/log_lik.R | 1 - tests/testthat/test_stan_besag.R | 188 ++++++++++++++----------------- tests/testthat/test_stan_bym.R | 188 ++++++++++++++----------------- tests/testthat/test_stan_bym2.R | 188 ++++++++++++++----------------- 4 files changed, 252 insertions(+), 313 deletions(-) diff --git a/R/log_lik.R b/R/log_lik.R index 98e05961a..ae59982fa 100644 --- a/R/log_lik.R +++ b/R/log_lik.R @@ -360,7 +360,6 @@ ll_args.stanreg <- function(object, newdata = NULL, offset = NULL, m = NULL, draws$beta <- cbind(draws$beta, b) } if (is(object, "car")) { - browser() psi_indx <- grep("^psi\\[[[:digit:]]+\\]", colnames(stanmat)) psi <- stanmat[, psi_indx, drop = FALSE] data$psi <- t(psi) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 61b92d877..54dcd1fdb 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -21,7 +21,7 @@ library(rstanarm) SEED <- 12345 set.seed(SEED) -ITER <- 50 +ITER <- 25 CHAINS <- 2 context("stan_besag") @@ -43,113 +43,94 @@ spatial_data <- grid_sim15@data SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = W, iter = 100, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = binomial(link = "logit"), - W = W, iter = 100, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = poisson(link = "log"), - W = W, iter = 500, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), family = neg_binomial_2(link = "log"), - W = W, iter = 500, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = W, iter = 500, chains = 4)) - -# compare answers with INLA (NB2 reciprocal_dispersion param fails!) -# test_that("stan_besag estimates match INLA", { -# inla_gauss_est <- c(-0.0475, 0.4329, 1/0.8277, 1/0.9830) -# inla_binom_est <- c(-1.9444, 0.3340, 1/0.4229) -# inla_pois_est <- c(0.7801, 0.4366, 1/0.3448) -# inla_nb_est <- c(0.8053, 0.4362, 1/0.3574, 48.6003) -# inla_gamma_est <- c(0.8119, -1.3407, 1/0.559, 1/1.106) -# besag_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) -# besag_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) -# besag_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) -# besag_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) -# besag_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) -# expect_equal(besag_gauss, inla_gauss_est, tol = 0.2) -# expect_equal(besag_binom, inla_binom_est, tol = 0.2) -# expect_equal(besag_pois, inla_pois_est, tol = 0.2) -# expect_equal(besag_nb2, inla_nb_est, tol = 0.2) -# expect_equal(besag_gamma, inla_gamma_est, tol = 0.2) + W = W, iter = ITER, chains = CHAINS)) + +# # test family/link combinations +# test_that("family = 'gaussian' works", { +# SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gauss_inv <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_gauss_ident) +# expect_stanreg(fit_gauss_log) +# expect_stanreg(fit_gauss_inv) +# }) +# test_that("family = 'binomial' works", { +# SW(fit_binom_logit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "logit"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_probit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "probit"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_cauchit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "cauchit"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_log <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_cloglog <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "cloglog"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_binom_logit) +# expect_stanreg(fit_binom_probit) +# expect_stanreg(fit_binom_cauchit) +# expect_stanreg(fit_binom_log) +# expect_stanreg(fit_binom_cloglog) +# +# }) +# test_that("family = 'poisson' works", { +# SW(fit_pois_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_pois_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_pois_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_pois_log) +# expect_stanreg(fit_pois_ident) +# expect_stanreg(fit_pois_sqrt) +# }) +# +# # the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links +# test_that("family = 'neg_binomial_2' works", { +# SW(fit_nb2_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_nb2_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_nb2_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_nb2_log) +# expect_stanreg(fit_nb2_ident) +# expect_stanreg(fit_nb2_sqrt) +# }) +# +# test_that("family = 'Gamma' works", { +# SW(fit_gamma_log <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gamma_ident <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gamma_sqrt <- stan_besag(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_gamma_log) +# expect_stanreg(fit_gamma_ident) +# expect_stanreg(fit_gamma_sqrt) # }) - -# test family/link combinations -test_that("family = 'gaussian' works", { - SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_inv <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_gauss_ident) - expect_stanreg(fit_gauss_log) - expect_stanreg(fit_gauss_inv) -}) -test_that("family = 'binomial' works", { - SW(fit_binom_logit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_probit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "probit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cauchit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cauchit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_log <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cloglog <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cloglog"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_binom_logit) - expect_stanreg(fit_binom_probit) - expect_stanreg(fit_binom_cauchit) - expect_stanreg(fit_binom_log) - expect_stanreg(fit_binom_cloglog) - -}) -test_that("family = 'poisson' works", { - SW(fit_pois_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_pois_log) - expect_stanreg(fit_pois_ident) - expect_stanreg(fit_pois_sqrt) -}) - -# the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links -test_that("family = 'neg_binomial_2' works", { - SW(fit_nb2_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_nb2_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_nb2_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_nb2_log) - expect_stanreg(fit_nb2_ident) - expect_stanreg(fit_nb2_sqrt) -}) - -test_that("family = 'Gamma' works", { - SW(fit_gamma_log <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gamma_ident <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gamma_sqrt <- stan_besag(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_gamma_log) - expect_stanreg(fit_gamma_ident) - expect_stanreg(fit_gamma_sqrt) -}) # test QR test_that("QR errors when number of predictors is <= 1", { @@ -171,13 +152,13 @@ test_that("stan_besag errors with algorithm = 'optimizing'", { "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) -# test_that("loo/waic for stan_besag works", { -# loo(fit_gauss) -# loo(fit_binom) -# loo(fit_pois) -# loo(fit_nb2) -# loo(fit_gamma) -# }) +test_that("loo/waic for stan_besag works", { + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + loo(fit_nb2) + loo(fit_gamma) +}) test_that("posterior_predict works for stan_besag", { preds_gauss <- posterior_predict(fit_gauss) @@ -205,4 +186,3 @@ test_that("predict errors if nrow(newdata) < number of spatial regions", { expect_error(predict(fit_gauss, newdata = data.frame(x = rnorm(10, 2, 1))), "'newdata' is less than the number of spatial regions.") }) - diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R index b85044290..b26f715a8 100644 --- a/tests/testthat/test_stan_bym.R +++ b/tests/testthat/test_stan_bym.R @@ -21,7 +21,7 @@ library(rstanarm) SEED <- 12345 set.seed(SEED) -ITER <- 50 +ITER <- 25 CHAINS <- 2 context("stan_bym") @@ -42,117 +42,98 @@ spatial_data <- grid_sim15@data SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), - W = W, iter = 100, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = binomial(link = "logit"), - W = W, iter = 100, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = poisson(link = "log"), - W = W, iter = 500, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_bym(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = neg_binomial_2(link = "log"), - W = W, iter = 500, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), - W = W, iter = 500, chains = 4)) - -# compare answers with INLA (NB2 reciprocal_dispersion param fails!) -# test_that("stan_bym estimates match INLA", { -# inla_gauss_est <- c(-0.0469, 0.4327, 1/0.8603, 1/1.6159, 1/2.5314) -# inla_binom_est <- c(-1.9449, 0.3339, 1/0.5624, 1/13.5187) -# inla_pois_est <- c(0.7792, 0.4365, 1/0.3874, 1/52.7799) -# inla_nb_est <- c(0.8008, 0.4366, 1/0.3806, 1/66.9760, 35.4347) -# inla_gamma_est <- c(0.7881, -1.3443, 1/0.6516, 1/24.4265, 1/1.1556) -# bym_gauss <- unname(fit_gauss$stan_summary[1:4,"mean"]) -# bym_binom <- unname(fit_binom$stan_summary[1:3,"mean"]) -# bym_pois <- unname(fit_pois$stan_summary[1:3,"mean"]) -# bym_nb2 <- unname(fit_nb2$stan_summary[1:4,"mean"]) -# bym_gamma <- unname(fit_gamma$stan_summary[1:4,"mean"]) -# expect_equal(bym_gauss, inla_gauss_est, tol = 0.2) -# expect_equal(bym_binom, inla_binom_est, tol = 0.2) -# expect_equal(bym_pois, inla_pois_est, tol = 0.2) -# expect_equal(bym_nb2, inla_nb_est, tol = 0.2) -# expect_equal(bym_gamma, inla_gamma_est, tol = 0.2) + W = W, iter = ITER, chains = CHAINS)) + +# # test family/link combinations +# test_that("family = 'gaussian' works", { +# SW(fit_gauss_ident <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gauss_log <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gauss_inv <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_gauss_ident) +# expect_stanreg(fit_gauss_log) +# expect_stanreg(fit_gauss_inv) +# }) +# test_that("family = 'binomial' works", { +# SW(fit_binom_logit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "logit"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_probit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "probit"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_cauchit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "cauchit"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_log <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_binom_cloglog <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "cloglog"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_binom_logit) +# expect_stanreg(fit_binom_probit) +# expect_stanreg(fit_binom_cauchit) +# expect_stanreg(fit_binom_log) +# expect_stanreg(fit_binom_cloglog) +# +# }) +# test_that("family = 'poisson' works", { +# SW(fit_pois_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_pois_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_pois_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_pois_log) +# expect_stanreg(fit_pois_ident) +# expect_stanreg(fit_pois_sqrt) +# }) +# +# # the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links +# test_that("family = 'neg_binomial_2' works", { +# SW(fit_nb2_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_nb2_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_nb2_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_nb2_log) +# expect_stanreg(fit_nb2_ident) +# expect_stanreg(fit_nb2_sqrt) +# }) +# +# test_that("family = 'Gamma' works", { +# SW(fit_gamma_log <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gamma_ident <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), +# W = W, iter = ITER, chains = CHAINS)) +# SW(fit_gamma_sqrt <- stan_bym(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), +# W = W, iter = ITER, chains = CHAINS)) +# expect_stanreg(fit_gamma_log) +# expect_stanreg(fit_gamma_ident) +# expect_stanreg(fit_gamma_sqrt) # }) - -# test family/link combinations -test_that("family = 'gaussian' works", { - SW(fit_gauss_ident <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_log <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gauss_inv <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_gauss_ident) - expect_stanreg(fit_gauss_log) - expect_stanreg(fit_gauss_inv) -}) -test_that("family = 'binomial' works", { - SW(fit_binom_logit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_probit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "probit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cauchit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cauchit"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_log <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_binom_cloglog <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cloglog"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_binom_logit) - expect_stanreg(fit_binom_probit) - expect_stanreg(fit_binom_cauchit) - expect_stanreg(fit_binom_log) - expect_stanreg(fit_binom_cloglog) - -}) -test_that("family = 'poisson' works", { - SW(fit_pois_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_pois_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_pois_log) - expect_stanreg(fit_pois_ident) - expect_stanreg(fit_pois_sqrt) -}) - -# the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links -test_that("family = 'neg_binomial_2' works", { - SW(fit_nb2_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_nb2_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_nb2_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_nb2_log) - expect_stanreg(fit_nb2_ident) - expect_stanreg(fit_nb2_sqrt) -}) - -test_that("family = 'Gamma' works", { - SW(fit_gamma_log <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gamma_ident <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), - W = W, iter = ITER, chains = CHAINS)) - SW(fit_gamma_sqrt <- stan_bym(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), - W = W, iter = ITER, chains = CHAINS)) - expect_stanreg(fit_gamma_log) - expect_stanreg(fit_gamma_ident) - expect_stanreg(fit_gamma_sqrt) -}) # test QR test_that("QR errors when number of predictors is <= 1", { @@ -174,13 +155,13 @@ test_that("stan_bym errors with algorithm = 'optimizing'", { "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) -# test_that("loo/waic for stan_bym works", { -# loo(fit_gauss) -# loo(fit_binom) -# loo(fit_pois) -# loo(fit_nb2) -# loo(fit_gamma) -# }) +test_that("loo/waic for stan_bym works", { + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + loo(fit_nb2) + loo(fit_gamma) +}) test_that("posterior_predict works for stan_bym", { preds_gauss <- posterior_predict(fit_gauss) @@ -208,4 +189,3 @@ test_that("predict errors if nrow(newdata) < number of spatial regions", { expect_error(predict(fit_gauss, newdata = data.frame(x = rnorm(10, 2, 1))), "'newdata' is less than the number of spatial regions.") }) - diff --git a/tests/testthat/test_stan_bym2.R b/tests/testthat/test_stan_bym2.R index 5a1c6c281..d4f750e17 100644 --- a/tests/testthat/test_stan_bym2.R +++ b/tests/testthat/test_stan_bym2.R @@ -21,7 +21,7 @@ library(rstanarm) SEED <- 12345 set.seed(SEED) -ITER <- 50 +ITER <- 25 CHAINS <- 2 context("stan_bym2") @@ -42,117 +42,98 @@ spatial_data <- grid_sim15@data SW(fit_gauss <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), - W = W, iter = 100, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = binomial(link = "logit"), - W = W, iter = 100, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = poisson(link = "log"), - W = W, iter = 500, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = neg_binomial_2(link = "log"), - W = W, iter = 500, chains = 4)) + W = W, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), - W = W, iter = 500, chains = 4)) - -# compare answers with INLA (NB2 reciprocal_dispersion param fails!) -# test_that("stan_bym2 estimates match INLA", { -# inla_gauss_est <- c(-0.0499, 0.4337, 0.4048, 1/1.0845, 1/2.1234) -# inla_binom_est <- c(-1.9432, 0.3338, 0.7963, 1/1.6385) -# inla_pois_est <- c(0.7813, 0.4361, 0.9127, 1/1.3033) -# inla_nb_est <- c(0.8017, 0.4363, 0.9136, 1/1.3051, 117.9266) -# inla_gamma_est <- c(0.7968, -1.3430, 0.807, 1/1.909, 1/1.140) -# bym2_gauss <- unname(fit_gauss$stan_summary[1:5,"mean"]) -# bym2_binom <- unname(fit_binom$stan_summary[1:4,"mean"]) -# bym2_pois <- unname(fit_pois$stan_summary[1:4,"mean"]) -# bym2_nb2 <- unname(fit_nb2$stan_summary[1:5,"mean"]) -# bym2_gamma <- unname(fit_gamma$stan_summary[1:5,"mean"]) -# expect_equal(bym2_gauss, inla_gauss_est, tol = 0.2) -# expect_equal(bym2_binom, inla_binom_est, tol = 0.2) -# expect_equal(bym2_pois, inla_pois_est, tol = 0.2) -# expect_equal(bym2_nb2, inla_nb_est, tol = 0.2) -# expect_equal(bym2_gamma, inla_gamma_est, tol = 0.2) + W = W, iter = ITER, chains = CHAINS)) + +# # test family/link combinations +# test_that("family = 'gaussian' works", { +# SW(fit_gauss_ident <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_gauss_log <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_gauss_inv <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), +# W = W, iter = 10, chains = CHAINS)) +# expect_stanreg(fit_gauss_ident) +# expect_stanreg(fit_gauss_log) +# expect_stanreg(fit_gauss_inv) +# }) +# test_that("family = 'binomial' works", { +# SW(fit_binom_logit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "logit"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_binom_probit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "probit"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_binom_cauchit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "cauchit"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_binom_log <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "log"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_binom_cloglog <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, +# family = binomial(link = "cloglog"), +# W = W, iter = 10, chains = CHAINS)) +# expect_stanreg(fit_binom_logit) +# expect_stanreg(fit_binom_probit) +# expect_stanreg(fit_binom_cauchit) +# expect_stanreg(fit_binom_log) +# expect_stanreg(fit_binom_cloglog) +# +# }) +# test_that("family = 'poisson' works", { +# SW(fit_pois_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_pois_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_pois_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), +# W = W, iter = 10, chains = CHAINS)) +# expect_stanreg(fit_pois_log) +# expect_stanreg(fit_pois_ident) +# expect_stanreg(fit_pois_sqrt) +# }) +# +# # the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links +# test_that("family = 'neg_binomial_2' works", { +# SW(fit_nb2_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_nb2_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_nb2_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), +# W = W, iter = 10, chains = CHAINS)) +# expect_stanreg(fit_nb2_log) +# expect_stanreg(fit_nb2_ident) +# expect_stanreg(fit_nb2_sqrt) +# }) +# +# test_that("family = 'Gamma' works", { +# SW(fit_gamma_log <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_gamma_ident <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), +# W = W, iter = 10, chains = CHAINS)) +# SW(fit_gamma_sqrt <- stan_bym2(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), +# W = W, iter = 10, chains = CHAINS)) +# expect_stanreg(fit_gamma_log) +# expect_stanreg(fit_gamma_ident) +# expect_stanreg(fit_gamma_sqrt) # }) - -# test family/link combinations -test_that("family = 'gaussian' works", { - SW(fit_gauss_ident <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_gauss_log <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_gauss_inv <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_gauss_ident) - expect_stanreg(fit_gauss_log) - expect_stanreg(fit_gauss_inv) -}) -test_that("family = 'binomial' works", { - SW(fit_binom_logit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "logit"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_binom_probit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "probit"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_binom_cauchit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cauchit"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_binom_log <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "log"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_binom_cloglog <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, - family = binomial(link = "cloglog"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_binom_logit) - expect_stanreg(fit_binom_probit) - expect_stanreg(fit_binom_cauchit) - expect_stanreg(fit_binom_log) - expect_stanreg(fit_binom_cloglog) - -}) -test_that("family = 'poisson' works", { - SW(fit_pois_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_pois_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_pois_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_pois_log) - expect_stanreg(fit_pois_ident) - expect_stanreg(fit_pois_sqrt) -}) - -# the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links -test_that("family = 'neg_binomial_2' works", { - SW(fit_nb2_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_nb2_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_nb2_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_nb2_log) - expect_stanreg(fit_nb2_ident) - expect_stanreg(fit_nb2_sqrt) -}) - -test_that("family = 'Gamma' works", { - SW(fit_gamma_log <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_gamma_ident <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), - W = W, iter = 10, chains = CHAINS)) - SW(fit_gamma_sqrt <- stan_bym2(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), - W = W, iter = 10, chains = CHAINS)) - expect_stanreg(fit_gamma_log) - expect_stanreg(fit_gamma_ident) - expect_stanreg(fit_gamma_sqrt) -}) # test QR test_that("QR errors when number of predictors is <= 1", { @@ -174,13 +155,13 @@ test_that("stan_bym2 errors with algorithm = 'optimizing'", { "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) -# test_that("loo/waic for stan_bym2 works", { -# loo(fit_gauss) -# loo(fit_binom) -# loo(fit_pois) -# loo(fit_nb2) -# loo(fit_gamma) -# }) +test_that("loo/waic for stan_bym2 works", { + loo(fit_gauss) + loo(fit_binom) + loo(fit_pois) + loo(fit_nb2) + loo(fit_gamma) +}) test_that("posterior_predict works for stan_bym2", { preds_gauss <- posterior_predict(fit_gauss) @@ -208,4 +189,3 @@ test_that("predict errors if nrow(newdata) < number of spatial regions", { expect_error(predict(fit_gauss, newdata = data.frame(x = rnorm(10, 2, 1))), "'newdata' is less than the number of spatial regions.") }) - From 4ab4d1f72afec252471480daee12df701a573983 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 22 Oct 2018 12:09:11 -0400 Subject: [PATCH 49/59] use sparseMatrix when dealing with CAR adjacency matrix --- R/stan_besag.R | 2 +- R/stan_spatial.fit.R | 17 ++++++++--------- tests/testthat/test_stan_besag.R | 12 ++++++------ 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/R/stan_besag.R b/R/stan_besag.R index a84761479..5b782b79b 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -125,7 +125,7 @@ stan_besag <- function(formula, mt <- terms(formula, data = data) Y <- array1D_check(model.response(mf, type = "any")) X <- model.matrix(formula, data) - + stanfit <- stan_spatial.fit(x = X, y = Y, w = W, trials = trials, family = family, diff --git a/R/stan_spatial.fit.R b/R/stan_spatial.fit.R index c42722032..060848476 100644 --- a/R/stan_spatial.fit.R +++ b/R/stan_spatial.fit.R @@ -36,10 +36,17 @@ stan_spatial.fit <- function(x, y, w, algorithm = c("sampling", "meanfield", "fullrank"), adapt_delta = NULL, QR = FALSE) { + + w[upper.tri(w)] <- 0 + # convert W to a sparse matrix if not already sparse. if(!is(w, "sparseMatrix")) w <- Matrix(w, sparse = TRUE) + # pull out adjacency pairs from W + edges <- summary(w) # analagous to `which(w == 1, arr.ind = TRUE)` on dense matrix + edges <- edges[,grep("^i$|^j$", colnames(edges))] + algorithm <- match.arg(algorithm) family <- validate_family(family) @@ -220,14 +227,6 @@ stan_spatial.fit <- function(x, y, w, xbar <- c(xbar %*% R_inv) } } - - # pull out adjacency pairs from W - adj_fun <- function(W) { - W[upper.tri(W)] <- NA - out <- which(W == 1, arr.ind = TRUE) - return(out) - } - edges <- adj_fun(W) # need to use uncentered version standata <- nlist(N = nrow(xtemp), @@ -280,7 +279,7 @@ stan_spatial.fit <- function(x, y, w, standata$order <- order if (order == 2) { - Q <- diag(rowSums(W)) - W + Q <- Matrix::diag(Matrix::rowSums(w)) - w Q <- Q %*% Q sparse_stuff <- rstan::extract_sparse_parts(Q) standata$Q_n <- as.array(length(sparse_stuff$w), dim = 1) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 54dcd1fdb..14b4161d3 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -38,27 +38,27 @@ data("lattice", package = "rstanarm") sp2weightmatrix <- function(spatialpolygon) { spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) } -W <- sp2weightmatrix(grid_sim15) +neigh <- sp2weightmatrix(grid_sim15) spatial_data <- grid_sim15@data SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = W, iter = ITER, chains = CHAINS)) + W = neigh, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) + W = neigh, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) + W = neigh, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), family = neg_binomial_2(link = "log"), - W = W, iter = ITER, chains = CHAINS)) + W = neigh, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = W, iter = ITER, chains = CHAINS)) + W = neigh, iter = ITER, chains = CHAINS)) # # test family/link combinations # test_that("family = 'gaussian' works", { From 9b5bedcc903753a14841790b8d160351b83f9d45 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Mon, 22 Oct 2018 17:27:33 -0400 Subject: [PATCH 50/59] simplify spatial tests --- tests/testthat/test_stan_besag.R | 92 ++++---------------------------- tests/testthat/test_stan_bym.R | 92 ++++---------------------------- tests/testthat/test_stan_bym2.R | 92 ++++---------------------------- 3 files changed, 30 insertions(+), 246 deletions(-) diff --git a/tests/testthat/test_stan_besag.R b/tests/testthat/test_stan_besag.R index 14b4161d3..a8d10d969 100644 --- a/tests/testthat/test_stan_besag.R +++ b/tests/testthat/test_stan_besag.R @@ -38,117 +38,45 @@ data("lattice", package = "rstanarm") sp2weightmatrix <- function(spatialpolygon) { spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) } -neigh <- sp2weightmatrix(grid_sim15) +adj <- sp2weightmatrix(grid_sim15) spatial_data <- grid_sim15@data SW(fit_gauss <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = neigh, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = binomial(link = "logit"), - W = neigh, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), family = poisson(link = "log"), - W = neigh, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_besag(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), family = neg_binomial_2(link = "log"), - W = neigh, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), - W = neigh, iter = ITER, chains = CHAINS)) - -# # test family/link combinations -# test_that("family = 'gaussian' works", { -# SW(fit_gauss_ident <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gauss_log <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gauss_inv <- stan_besag(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_gauss_ident) -# expect_stanreg(fit_gauss_log) -# expect_stanreg(fit_gauss_inv) -# }) -# test_that("family = 'binomial' works", { -# SW(fit_binom_logit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "logit"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_probit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "probit"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_cauchit <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "cauchit"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_log <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_cloglog <- stan_besag(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "cloglog"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_binom_logit) -# expect_stanreg(fit_binom_probit) -# expect_stanreg(fit_binom_cauchit) -# expect_stanreg(fit_binom_log) -# expect_stanreg(fit_binom_cloglog) -# -# }) -# test_that("family = 'poisson' works", { -# SW(fit_pois_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_pois_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_pois_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_pois_log) -# expect_stanreg(fit_pois_ident) -# expect_stanreg(fit_pois_sqrt) -# }) -# -# # the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links -# test_that("family = 'neg_binomial_2' works", { -# SW(fit_nb2_log <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_nb2_ident <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_nb2_sqrt <- stan_besag(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_nb2_log) -# expect_stanreg(fit_nb2_ident) -# expect_stanreg(fit_nb2_sqrt) -# }) -# -# test_that("family = 'Gamma' works", { -# SW(fit_gamma_log <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gamma_ident <- stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gamma_sqrt <- stan_besag(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_gamma_log) -# expect_stanreg(fit_gamma_ident) -# expect_stanreg(fit_gamma_sqrt) -# }) + W = adj, iter = ITER, chains = CHAINS)) # test QR test_that("QR errors when number of predictors is <= 1", { expect_error( - stan_besag(y_gauss ~ x, data = spatial_data, W = W, family = gaussian(), seed = SEED, QR = TRUE), + stan_besag(y_gauss ~ x, data = spatial_data, W = adj, family = gaussian(), seed = SEED, QR = TRUE), "'QR' can only be specified when there are multiple predictors" ) }) test_that("QR works when number of x predictors is > 1", { SW(fit_besag <- stan_besag(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + W = adj, iter = ITER, chains = CHAINS, QR = TRUE)) expect_stanreg(fit_besag) }) test_that("stan_besag errors with algorithm = 'optimizing'", { expect_error(stan_besag(y_gamma ~ 1 + x, data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, algorithm = "optimizing"), + W = adj, iter = ITER, chains = CHAINS, algorithm = "optimizing"), "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) @@ -169,7 +97,7 @@ test_that("posterior_predict works for stan_besag", { }) test_that("predict works for stan_besag", { - new_dat <- data.frame(x = rnorm(nrow(W), 2, 1)) + new_dat <- data.frame(x = rnorm(nrow(adj), 2, 1)) predict(fit_gauss) predict(fit_binom) predict(fit_pois) diff --git a/tests/testthat/test_stan_bym.R b/tests/testthat/test_stan_bym.R index b26f715a8..0cd8b3639 100644 --- a/tests/testthat/test_stan_bym.R +++ b/tests/testthat/test_stan_bym.R @@ -36,122 +36,50 @@ data("lattice", package = "rstanarm") sp2weightmatrix <- function(spatialpolygon) { spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) } -W <- sp2weightmatrix(grid_sim15) +adj <- sp2weightmatrix(grid_sim15) spatial_data <- grid_sim15@data SW(fit_gauss <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_bym(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_bym(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), family = neg_binomial_2(link = "log"), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_unstructured = normal(0,1), prior_structured = normal(0,1), - W = W, iter = ITER, chains = CHAINS)) - -# # test family/link combinations -# test_that("family = 'gaussian' works", { -# SW(fit_gauss_ident <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gauss_log <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gauss_inv <- stan_bym(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_gauss_ident) -# expect_stanreg(fit_gauss_log) -# expect_stanreg(fit_gauss_inv) -# }) -# test_that("family = 'binomial' works", { -# SW(fit_binom_logit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "logit"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_probit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "probit"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_cauchit <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "cauchit"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_log <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_binom_cloglog <- stan_bym(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "cloglog"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_binom_logit) -# expect_stanreg(fit_binom_probit) -# expect_stanreg(fit_binom_cauchit) -# expect_stanreg(fit_binom_log) -# expect_stanreg(fit_binom_cloglog) -# -# }) -# test_that("family = 'poisson' works", { -# SW(fit_pois_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_pois_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_pois_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_pois_log) -# expect_stanreg(fit_pois_ident) -# expect_stanreg(fit_pois_sqrt) -# }) -# -# # the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links -# test_that("family = 'neg_binomial_2' works", { -# SW(fit_nb2_log <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_nb2_ident <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_nb2_sqrt <- stan_bym(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_nb2_log) -# expect_stanreg(fit_nb2_ident) -# expect_stanreg(fit_nb2_sqrt) -# }) -# -# test_that("family = 'Gamma' works", { -# SW(fit_gamma_log <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gamma_ident <- stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), -# W = W, iter = ITER, chains = CHAINS)) -# SW(fit_gamma_sqrt <- stan_bym(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), -# W = W, iter = ITER, chains = CHAINS)) -# expect_stanreg(fit_gamma_log) -# expect_stanreg(fit_gamma_ident) -# expect_stanreg(fit_gamma_sqrt) -# }) + W = adj, iter = ITER, chains = CHAINS)) # test QR test_that("QR errors when number of predictors is <= 1", { expect_error( - stan_bym(y_gauss ~ x, data = spatial_data, family = gaussian(), W = W, seed = SEED, QR = TRUE), + stan_bym(y_gauss ~ x, data = spatial_data, family = gaussian(), W = adj, seed = SEED, QR = TRUE), "'QR' can only be specified when there are multiple predictors" ) }) test_that("QR works when number of x predictors is > 1", { SW(fit_bym <- stan_bym(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + W = adj, iter = ITER, chains = CHAINS, QR = TRUE)) expect_stanreg(fit_bym) }) test_that("stan_bym errors with algorithm = 'optimizing'", { expect_error(stan_bym(y_gamma ~ 1 + x, data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, algorithm = "optimizing"), + W = adj, iter = ITER, chains = CHAINS, algorithm = "optimizing"), "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) @@ -172,7 +100,7 @@ test_that("posterior_predict works for stan_bym", { }) test_that("predict works for stan_bym", { - new_dat <- data.frame(x = rnorm(nrow(W), 2, 1)) + new_dat <- data.frame(x = rnorm(nrow(adj), 2, 1)) predict(fit_gauss) predict(fit_binom) predict(fit_pois) diff --git a/tests/testthat/test_stan_bym2.R b/tests/testthat/test_stan_bym2.R index d4f750e17..a1fc3a902 100644 --- a/tests/testthat/test_stan_bym2.R +++ b/tests/testthat/test_stan_bym2.R @@ -36,122 +36,50 @@ data("lattice", package = "rstanarm") sp2weightmatrix <- function(spatialpolygon) { spdep::nb2mat(spdep::poly2nb(spatialpolygon, queen = TRUE), style = "B", zero.policy = TRUE) } -W <- sp2weightmatrix(grid_sim15) +adj <- sp2weightmatrix(grid_sim15) spatial_data <- grid_sim15@data SW(fit_gauss <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_binom <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = binomial(link = "logit"), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_pois <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = poisson(link = "log"), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_nb2 <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), family = neg_binomial_2(link = "log"), - W = W, iter = ITER, chains = CHAINS)) + W = adj, iter = ITER, chains = CHAINS)) SW(fit_gamma <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), prior_intercept = normal(0,1), prior = normal(0,1), prior_aux = normal(0,1), prior_structured = normal(0,1), prior_mixing = beta(0.5,0.5), - W = W, iter = ITER, chains = CHAINS)) - -# # test family/link combinations -# test_that("family = 'gaussian' works", { -# SW(fit_gauss_ident <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "identity"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_gauss_log <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "log"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_gauss_inv <- stan_bym2(y_gauss ~ 1 + x, data = spatial_data, family = gaussian(link = "inverse"), -# W = W, iter = 10, chains = CHAINS)) -# expect_stanreg(fit_gauss_ident) -# expect_stanreg(fit_gauss_log) -# expect_stanreg(fit_gauss_inv) -# }) -# test_that("family = 'binomial' works", { -# SW(fit_binom_logit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "logit"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_binom_probit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "probit"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_binom_cauchit <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "cauchit"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_binom_log <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "log"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_binom_cloglog <- stan_bym2(y_binom ~ 1 + x, trials = spatial_data$trials, data = spatial_data, -# family = binomial(link = "cloglog"), -# W = W, iter = 10, chains = CHAINS)) -# expect_stanreg(fit_binom_logit) -# expect_stanreg(fit_binom_probit) -# expect_stanreg(fit_binom_cauchit) -# expect_stanreg(fit_binom_log) -# expect_stanreg(fit_binom_cloglog) -# -# }) -# test_that("family = 'poisson' works", { -# SW(fit_pois_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "log"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_pois_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "identity"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_pois_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = poisson(link = "sqrt"), -# W = W, iter = 10, chains = CHAINS)) -# expect_stanreg(fit_pois_log) -# expect_stanreg(fit_pois_ident) -# expect_stanreg(fit_pois_sqrt) -# }) -# -# # the Gamma and neg_binomial_2 likelihoods are buggy with identity/inverse links -# test_that("family = 'neg_binomial_2' works", { -# SW(fit_nb2_log <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "log"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_nb2_ident <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "identity"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_nb2_sqrt <- stan_bym2(y_pois ~ 1 + x, data = spatial_data, family = neg_binomial_2(link = "sqrt"), -# W = W, iter = 10, chains = CHAINS)) -# expect_stanreg(fit_nb2_log) -# expect_stanreg(fit_nb2_ident) -# expect_stanreg(fit_nb2_sqrt) -# }) -# -# test_that("family = 'Gamma' works", { -# SW(fit_gamma_log <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "identity"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_gamma_ident <- stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = Gamma(link = "log"), -# W = W, iter = 10, chains = CHAINS)) -# SW(fit_gamma_sqrt <- stan_bym2(y_gamma + 30 ~ 1 + x, data = spatial_data, family = Gamma(link = "inverse"), -# W = W, iter = 10, chains = CHAINS)) -# expect_stanreg(fit_gamma_log) -# expect_stanreg(fit_gamma_ident) -# expect_stanreg(fit_gamma_sqrt) -# }) + W = adj, iter = ITER, chains = CHAINS)) # test QR test_that("QR errors when number of predictors is <= 1", { expect_error( - stan_bym2(y_gauss ~ x, data = spatial_data, family = gaussian(), W = W, seed = SEED, QR = TRUE), + stan_bym2(y_gauss ~ x, data = spatial_data, family = gaussian(), W = adj, seed = SEED, QR = TRUE), "'QR' can only be specified when there are multiple predictors" ) }) test_that("QR works when number of x predictors is > 1", { SW(stan_bym <- stan_bym2(y_gauss ~ 1 + x + I(x^2), data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, QR = TRUE)) + W = adj, iter = ITER, chains = CHAINS, QR = TRUE)) expect_stanreg(stan_bym) }) test_that("stan_bym2 errors with algorithm = 'optimizing'", { expect_error(stan_bym2(y_gamma ~ 1 + x, data = spatial_data, family = gaussian(), - W = W, iter = ITER, chains = CHAINS, algorithm = "optimizing"), + W = adj, iter = ITER, chains = CHAINS, algorithm = "optimizing"), "'arg' should be one of “sampling”, “meanfield”, “fullrank”") }) @@ -172,7 +100,7 @@ test_that("posterior_predict works for stan_bym2", { }) test_that("predict works for stan_bym2", { - new_dat <- data.frame(x = rnorm(nrow(W), 2, 1)) + new_dat <- data.frame(x = rnorm(nrow(adj), 2, 1)) predict(fit_gauss) predict(fit_binom) predict(fit_pois) From e65b2c74b8bc0bc65120fecef911536e687f620c Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 23 Oct 2018 15:02:22 -0400 Subject: [PATCH 51/59] fixing unit tests --- R/posterior_predict.R | 2 -- R/pp_validate.R | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/R/posterior_predict.R b/R/posterior_predict.R index e24d99640..d1cb62ab1 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -206,8 +206,6 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, } else if (!is_polr(object) && is.binomial(family(object, m = m)$family)) { ppargs$trials <- pp_binomial_trials(object, newdata, m = m) } - if (!is_polr(object) && is.binomial(family(object)$family)) # Simplify this - ppargs$trials <- pp_binomial_trials(object, newdata) if (is(object, "car") && is.binomial(family(object)$family)) ppargs$trials <- object$trials ppfun <- pp_fun(object, m = m) diff --git a/R/pp_validate.R b/R/pp_validate.R index 28d108b0a..a1ffeb3bc 100644 --- a/R/pp_validate.R +++ b/R/pp_validate.R @@ -134,6 +134,7 @@ pp_validate <- function(object, nreps = 20, seed = 12345, ...) { post_mat <- as.matrix(post) data_mat <- posterior_predict(post) constant <- apply(data_mat, 1, FUN = function(x) all(duplicated(x)[-1L])) + if (any(constant)) stop("'pp_validate' cannot proceed because some simulated outcomes are constant. ", "Try again with better priors on the parameters.") From abd0a72a836c5f7c8272199fcc96ae963b2d0390 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Tue, 23 Oct 2018 18:58:14 -0400 Subject: [PATCH 52/59] adding is_car instead of is(object, 'car') --- R/misc.R | 5 +++++ R/posterior_predict.R | 6 +++--- R/stanreg.R | 6 +++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/R/misc.R b/R/misc.R index f85ecaaf4..5ee691f7f 100644 --- a/R/misc.R +++ b/R/misc.R @@ -123,6 +123,11 @@ is_polr <- function(object) { is(object, "polr") } +# test if a stanreg object has class car (conditional autoregressive) +is_car <- function(object) { + is(object, "car") +} + # test if a stanreg object is a scobit model is_scobit <- function(object) { validate_stanreg_object(object) diff --git a/R/posterior_predict.R b/R/posterior_predict.R index d1cb62ab1..941bea469 100644 --- a/R/posterior_predict.R +++ b/R/posterior_predict.R @@ -206,7 +206,7 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, } else if (!is_polr(object) && is.binomial(family(object, m = m)$family)) { ppargs$trials <- pp_binomial_trials(object, newdata, m = m) } - if (is(object, "car") && is.binomial(family(object)$family)) + if (is_car(object) && is.binomial(family(object)$family)) ppargs$trials <- object$trials ppfun <- pp_fun(object, m = m) ytilde <- do.call(ppfun, ppargs) @@ -218,7 +218,7 @@ posterior_predict.stanreg <- function(object, newdata = NULL, draws = NULL, ytilde <- matrix(levels(get_y(object))[ytilde], nrow(ytilde), ncol(ytilde)) # fix me! - if (is(object, "car")) { + if (is_car(object)) { if (is.null(newdata)) colnames(ytilde) <- rownames(model.frame(object)) else colnames(ytilde) <- rownames(newdata) } @@ -440,7 +440,7 @@ pp_eta <- function(object, data, draws = NULL, m = NULL, stanmat = NULL) { eta <- t(eta) } - if (is(object, "car")) { + if (is_car(object)) { psi_indx <- grep("psi", colnames(stanmat)) psi <- stanmat[, psi_indx, drop = FALSE] if (some_draws) diff --git a/R/stanreg.R b/R/stanreg.R index 3911c1e08..e44be5e47 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -31,7 +31,7 @@ stanreg <- function(object) { nobs <- NROW(y) ynames <- if (is.matrix(y)) rownames(y) else names(y) - is_car <- object$stan_function %in% c("stan_besag", "stan_bym", "stan_bym2") + # is_car <- object$stan_function %in% c("stan_besag", "stan_bym", "stan_bym2") is_betareg <- is.beta(family$family) if (is_betareg) { family_phi <- object$family_phi # pull out phi family/link @@ -92,7 +92,7 @@ stanreg <- function(object) { # linear predictor, fitted values eta <- linear_predictor(coefs, x, object$offset) - if (is_car) { + if (is_car(object)) { psi_indx <- grep("psi", colnames(as.matrix(object$stanfit))) psi <- as.matrix(object$stanfit)[,psi_indx] psi <- unname(colMeans(psi)) @@ -156,7 +156,7 @@ stanreg <- function(object) { out$eta_z <- eta_z out$phi <- phi } - if (is_car) { + if (is_car(object)) { out$psi <- psi out$trials <- object$trials } From 557958c44c799d17f15f84ad440906b10744adb5 Mon Sep 17 00:00:00 2001 From: Imad Ali Date: Sat, 27 Oct 2018 23:53:40 -0400 Subject: [PATCH 53/59] revising spatial model vignette --- R/log_lik.R | 4 ++-- R/stan_besag.R | 2 +- R/stanreg.R | 6 +++--- vignettes/spatial.Rmd | 30 +++++++++++++++++++++++------- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/R/log_lik.R b/R/log_lik.R index ae59982fa..5626c71a6 100644 --- a/R/log_lik.R +++ b/R/log_lik.R @@ -271,7 +271,7 @@ ll_args.stanreg <- function(object, newdata = NULL, offset = NULL, m = NULL, trials <- 1 if (is.factor(y)) y <- fac2bin(y) - if (!is(object, "car")) + if (!is_car(object)) stopifnot(all(y %in% c(0, 1))) else trials <- object$trials @@ -359,7 +359,7 @@ ll_args.stanreg <- function(object, newdata = NULL, offset = NULL, m = NULL, data <- cbind(data, as.matrix(z)[1:NROW(x),, drop = FALSE]) draws$beta <- cbind(draws$beta, b) } - if (is(object, "car")) { + if (is_car(object)) { psi_indx <- grep("^psi\\[[[:digit:]]+\\]", colnames(stanmat)) psi <- stanmat[, psi_indx, drop = FALSE] data$psi <- t(psi) diff --git a/R/stan_besag.R b/R/stan_besag.R index 5b782b79b..29db31bf0 100644 --- a/R/stan_besag.R +++ b/R/stan_besag.R @@ -151,7 +151,7 @@ stan_besag <- function(formula, stan_function = stan_function) if (family$family == "binomial") { - fit$family <- binomial(link = "logit") + # fit$family <- binomial(link = "logit") fit$trials <- trials } out <- stanreg(fit) diff --git a/R/stanreg.R b/R/stanreg.R index e44be5e47..3911c1e08 100644 --- a/R/stanreg.R +++ b/R/stanreg.R @@ -31,7 +31,7 @@ stanreg <- function(object) { nobs <- NROW(y) ynames <- if (is.matrix(y)) rownames(y) else names(y) - # is_car <- object$stan_function %in% c("stan_besag", "stan_bym", "stan_bym2") + is_car <- object$stan_function %in% c("stan_besag", "stan_bym", "stan_bym2") is_betareg <- is.beta(family$family) if (is_betareg) { family_phi <- object$family_phi # pull out phi family/link @@ -92,7 +92,7 @@ stanreg <- function(object) { # linear predictor, fitted values eta <- linear_predictor(coefs, x, object$offset) - if (is_car(object)) { + if (is_car) { psi_indx <- grep("psi", colnames(as.matrix(object$stanfit))) psi <- as.matrix(object$stanfit)[,psi_indx] psi <- unname(colMeans(psi)) @@ -156,7 +156,7 @@ stanreg <- function(object) { out$eta_z <- eta_z out$phi <- phi } - if (is_car(object)) { + if (is_car) { out$psi <- psi out$trials <- object$trials } diff --git a/vignettes/spatial.Rmd b/vignettes/spatial.Rmd index ba83f2ca4..f2734e293 100644 --- a/vignettes/spatial.Rmd +++ b/vignettes/spatial.Rmd @@ -41,9 +41,10 @@ The linear predictor takes the following form, $$ \boldsymbol{\eta} = \alpha + \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\psi} $$ -where $\alpha$ is the intercept, $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors, $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect (and $N$ denotes the number of spatial units). The construction of $\boldsymbol{\psi}$ depends on the model, which is discussed in the relevant sections below. +where $\alpha$ is the intercept, $\mathbf{X}$ is an $N$-by-$K$ matrix of predictors ($N$ being the number of observations and $K$ being the number of predictors), $\boldsymbol{\beta}$ is a $K$-dimensional vector of regression coefficients, and $\boldsymbol{\psi}$ is a $N$-dimensional vector representing the spatial effect. The construction of $\boldsymbol{\psi}$ depends on the model, which is discussed in the relevant sections below. + +Depending on the choice of likelihood there may or may not be an additional auxiliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data). With all these components, for some probability density/mass function $f$, we can state the general form of the likelihood as, -Depending on the choice of likelihood there may or may not be an additional auxiliary parameter $\gamma$ in the model (e.g. in a Gaussian likelihood this would be the variation of the data). Thus, for some probability density/mass function $f$ we can state the general form of the likelihood as, $$ \mathcal{L}(\alpha, \boldsymbol{\beta}, \gamma | \mathbf{y}) = \prod_{i=1}^N f(y_i | \alpha, \boldsymbol{\beta}, \gamma ) $$ @@ -51,10 +52,12 @@ $$ ## GMRF Hierarchical Component CAR models require that you define the spatial component as a Gaussian Markov Random Field (GMRF). The random vector $\boldsymbol{\phi}$ is a GMRF with respect to the graph $\mathcal{G} = (\mathcal{V} = \{1,\ldots,n\},\mathcal{E})$ with mean vector $\boldsymbol{\mu}$ and precision matrix $\mathbf{W}$ if its probability density function takes the precision form of the multivariate normal distribution, + $$ f(\boldsymbol{\phi} | \boldsymbol{\mu}) = (2\pi)^{-n/2} |\mathbf{W}|^{1/2} \exp\bigg( -\frac{1}{2}(\boldsymbol{\phi-\mu})^{\top}\mathbf{W}(\boldsymbol{\phi-\mu}) \bigg) $$ + and $W_{i,j} \neq 0$ when $\{i,j\}\in\mathcal{E}$ for all $i \neq j$. Here, $\mathcal{V}$ refers to the verticies on the graph (i.e. the spatial units) and $\mathcal{E}$ refers to the edges on the graph (i.e. the spatial units that are neighbors). In other words, $\mathbf{W}$ is an $N$-by-$N$ matrix (with zeros on the diagonal) which describes spatial adjacency. Unfortunately there is no guarantee that $\mathbf{W}$ is positive definite so $\mathbf{Q} = \mbox{diag}(\mathbf{W1}) - W$ (which is guaranteed to be positive semi-definite) is used as the precision matrix. @@ -62,6 +65,7 @@ Unfortunately there is no guarantee that $\mathbf{W}$ is positive definite so $\ ## Besag (ICAR) Spatial Prior The `stan_besag` modeling function fits the data to an ICAR model. This means that the spatial effect enters the linear predictor as + $$ \begin{align} \boldsymbol{\psi} = \boldsymbol{\phi} \\ @@ -74,7 +78,8 @@ where $\tau$ is a scalar that controls the overall spatial variation and has an ## BYM -The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which results in misleading parameter estimates and invalid inferences. The `stan_bym` model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial effect takes the following form, +The ICAR model is limited in that it only accounts for spatial variation among the spatial units. Thus, the random variation is picked up by the spatial variation which may result in misleading parameter estimates and invalid inferences. The `stan_bym` model explains spatial variation as the sum of a structured (spatial) component $\boldsymbol{\phi}$ and an unstructured (random) component $\boldsymbol{\theta}$. Therefore, the spatial effect takes the following form, + $$ \begin{align} \boldsymbol{\psi} &= \rho\boldsymbol{\phi} + \tau\boldsymbol{\theta} \\ @@ -83,11 +88,13 @@ f(\boldsymbol{\phi} | \boldsymbol{\mu}) &= (2\pi)^{-n/2} |\mathbf{Q}|^{1/2} f(\theta_i) &= (2\pi)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} \end{align} $$ + Note that the unstructured effect $\boldsymbol{\theta}$ is distributed standard normal. ## BYM2 (Variant of the BYM Spatial Prior) The `stan_bym2` modeling function fits the data to a variant of the BYM model where the spatial effect enters as a convolution of the structured (spatial) effect and the unstructured (random) effect, + $$ \begin{align} \boldsymbol{\psi} &= \tau(\boldsymbol{\theta}\sqrt{1-\rho} + \boldsymbol{\phi}\sqrt{\rho}) \\ @@ -97,9 +104,9 @@ f(\theta_i) &= (2\pi)^{-1/2}\exp{\bigg( -\frac{\theta_i^2}{2} \bigg)} \end{align} $$ -As in the BYM model $\boldsymbol{\theta}$ is distributed standard normal. However, the parameter $\rho$ is on the unit interval and is interpreted as the proportion of spatial variation that is contributed to overall variation, and $\tau$ explains the overall (convolved) variation. +As in the BYM model $\boldsymbol{\theta}$ is distributed standard normal. However, now the parameter $\rho$ is on the unit interval and is interpreted as the proportion of spatial variation that is contributed to overall variation, and $\tau$ explains the overall (convolved) variation. -Priors on $\rho$ should be chosen wisely as $\rho=0$ reduces to a model that not account for spatial variation and $\rho=1$ reduces to the ICAR model, which does not account for random variation among the spatial units. +Priors on $\rho$ should be chosen carefully as $\rho=0$ reduces to a model that not account for spatial variation and $\rho=1$ reduces to the ICAR model, which does not account for random variation among the spatial units. ## Posterior @@ -193,11 +200,19 @@ spplot(grid_sim, "y_pred", at = var_range_y_pred, main = expression(y[pred]), ``` Alternatively we can look at the conventional one-dimensional posterior predictive check with the `pp_check` function. + ```{r ppcheck-1d, fig.align='center', fig.height=8} pp_check(fit_besag) ``` -In order to compare the predictive performance between the models we need to use the [loo](http://mc-stan.org/loo) package. Currently, however, this is not supported for CAR spatial models. +In order to compare the predictive performance between the models we need to use the [loo](http://mc-stan.org/loo) package. Looking at the results below we can confirm that the correct model outperforms the incorrect model in terms of predictive accuracy. + +```{r loo} +library(loo) +loo_correct <- loo(fit_besag) +loo_incorrect <- loo(fit_besag_bad) +compare(loo_correct, loo_incorrect) +``` ## Smoothing the Spatial Random Walk @@ -205,7 +220,8 @@ In some cases modeling the GMRF spatial component with the precision matrix $\ma ```{r smoothing, results="hide"} fit_besag_smooth <- stan_besag(y ~ 1 + x + z, data = spatial_data, W, order = 2, - prior_intercept = normal(0,1), prior = normal(0,1), prior_rho = normal(0,1), + prior_intercept = normal(0,1), prior = normal(0,1), + prior_rho = normal(0,1), family = binomial(link="logit"), trials = spatial_data$trials, chains = CHAINS, cores = CORES, seed = SEED, iter = ITER) ``` From 05eed19ae991cd9dd6aa637e1a08544f931b7d03 Mon Sep 17 00:00:00 2001 From: Ben Goodrich Date: Sun, 28 Oct 2018 14:08:39 -0400 Subject: [PATCH 54/59] delete src/include --- src/include/models.hpp | 20937 -------------------------------- src/include/models.hpp.bak | 22874 ----------------------------------- 2 files changed, 43811 deletions(-) delete mode 100644 src/include/models.hpp delete mode 100644 src/include/models.hpp.bak diff --git a/src/include/models.hpp b/src/include/models.hpp deleted file mode 100644 index bc1a4e855..000000000 --- a/src/include/models.hpp +++ /dev/null @@ -1,20937 +0,0 @@ -/* - rstanarm is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - rstanarm is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with rstanarm. If not, see . -*/ -#ifndef MODELS_HPP -#define MODELS_HPP -#define STAN__SERVICES__COMMAND_HPP -#include -// Code generated by Stan version 2.16.0 - -#include - -namespace model_bernoulli_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_bernoulli"); - reader.add_event(760, 760, "end", "model_bernoulli"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - stan::math::assign(pi, divide(pi,sum(pi))); - stan::math::assign(zeta_mark, (zeta_mark + nc)); - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - stan::math::assign(rho_mark, (rho_mark + 1)); - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - stan::math::assign(z_T_mark, (z_T_mark + r)); - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - for (int c = 1; c <= r; ++c) { - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - for (int c = 1; c <= nc; ++c) { - for (int r = c; r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - for (int c = 1; c <= nc; ++c) { - - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - for (int r = (c + 1); r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - stan::math::assign(b_mark, (b_mark - 1)); - for (int s = 1; s <= nc; ++s) { - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - lp_accum__.add(normal_log(z_b,0,1)); - lp_accum__.add(normal_log(z_T,0,1)); - for (int i = 1; i <= t; ++i) { - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - stan::math::assign(pos_reg, (pos_reg + 1)); - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - stan::math::assign(nu, (nu - 0.5)); - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - lp_accum__.add(gamma_log(zeta,delta,1)); - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - stan::math::assign(K, rows(z_beta)); - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - if (as_bool(logical_gt(t,0))) { - for (int j = 1; j <= N; ++j) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - stan::math::assign(pos, (pos + 1)); - } - } - } - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_bern(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(add(divide(atan(eta),stan::math::pi()),0.5)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,5))) { - return stan::math::promote_scalar(inv_cloglog(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_bern_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_bern(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -ll_bern_lp(const Eigen::Matrix& eta0, - const Eigen::Matrix& eta1, - const int& link, - const std::vector& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - - lp_accum__.add(logistic_ccdf_log(eta0,0,1)); - lp_accum__.add(logistic_cdf_log(eta1,0,1)); - } else if (as_bool(logical_eq(link,2))) { - - lp_accum__.add(normal_ccdf_log(eta0,0,1)); - lp_accum__.add(normal_cdf_log(eta1,0,1)); - } else if (as_bool(logical_eq(link,3))) { - - lp_accum__.add(cauchy_ccdf_log(eta0,0,1)); - lp_accum__.add(cauchy_cdf_log(eta1,0,1)); - } else if (as_bool(logical_eq(link,4))) { - - lp_accum__.add(log1m_exp(eta0)); - lp_accum__.add(eta1); - } else if (as_bool(logical_eq(link,5))) { - - lp_accum__.add(log1m_exp(minus(exp(eta1)))); - lp_accum__.add(minus(exp(eta0))); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_bern_lp_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const Eigen::Matrix& eta0, - const Eigen::Matrix& eta1, - const int& link, - const std::vector& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_bern_lp(eta0, eta1, link, N, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_bern(const int& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,1))) { - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), bernoulli_logit_log(y,get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,5))) { - { - validate_non_negative_index("pi", "N", N); - Eigen::Matrix pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,linkinv_bern(eta,link, pstream__)); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), bernoulli_log(y,get_base1(pi,n,"pi",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_bern_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const int& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_bern(y, eta, link, pstream__); - } -}; - -class model_bernoulli : public prob_grad { -private: - int K; - vector N; - vector_d xbar; - int dense_X; - vector X0; - vector X1; - int nnz_X0; - vector_d w_X0; - vector v_X0; - vector u_X0; - int nnz_X1; - vector_d w_X1; - vector v_X1; - vector u_X1; - int K_smooth; - matrix_d S0; - matrix_d S1; - vector smooth_map; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights0; - vector_d weights1; - int has_offset; - vector_d offset0; - vector_d offset1; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - vector num_non_zero; - vector_d w0; - vector_d w1; - vector v0; - vector v1; - vector u0; - vector u1; - int special_case; - int NN; - double aux; - vector > V0; - vector > V1; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_bernoulli(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_bernoulli(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_bernoulli_namespace::model_bernoulli"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("N", "2", 2); - context__.validate_dims("data initialization", "N", "int", context__.to_vec(2)); - validate_non_negative_index("N", "2", 2); - N = std::vector(2,int(0)); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - size_t N_limit_0__ = 2; - for (size_t i_0__ = 0; i_0__ < N_limit_0__; ++i_0__) { - N[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X0", "dense_X", dense_X); - validate_non_negative_index("X0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("X0", "K", K); - context__.validate_dims("data initialization", "X0", "matrix_d", context__.to_vec(dense_X,get_base1(N,1,"N",1),K)); - validate_non_negative_index("X0", "dense_X", dense_X); - validate_non_negative_index("X0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("X0", "K", K); - X0 = std::vector(dense_X,matrix_d(static_cast(get_base1(N,1,"N",1)),static_cast(K))); - vals_r__ = context__.vals_r("X0"); - pos__ = 0; - size_t X0_m_mat_lim__ = get_base1(N,1,"N",1); - size_t X0_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X0_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X0_m_mat_lim__; ++m_mat__) { - size_t X0_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X0_limit_0__; ++i_0__) { - X0[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - validate_non_negative_index("X1", "dense_X", dense_X); - validate_non_negative_index("X1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("X1", "K", K); - context__.validate_dims("data initialization", "X1", "matrix_d", context__.to_vec(dense_X,get_base1(N,2,"N",1),K)); - validate_non_negative_index("X1", "dense_X", dense_X); - validate_non_negative_index("X1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("X1", "K", K); - X1 = std::vector(dense_X,matrix_d(static_cast(get_base1(N,2,"N",1)),static_cast(K))); - vals_r__ = context__.vals_r("X1"); - pos__ = 0; - size_t X1_m_mat_lim__ = get_base1(N,2,"N",1); - size_t X1_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X1_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X1_m_mat_lim__; ++m_mat__) { - size_t X1_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X1_limit_0__; ++i_0__) { - X1[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X0", "int", context__.to_vec()); - nnz_X0 = int(0); - vals_i__ = context__.vals_i("nnz_X0"); - pos__ = 0; - nnz_X0 = vals_i__[pos__++]; - validate_non_negative_index("w_X0", "nnz_X0", nnz_X0); - context__.validate_dims("data initialization", "w_X0", "vector_d", context__.to_vec(nnz_X0)); - validate_non_negative_index("w_X0", "nnz_X0", nnz_X0); - w_X0 = vector_d(static_cast(nnz_X0)); - vals_r__ = context__.vals_r("w_X0"); - pos__ = 0; - size_t w_X0_i_vec_lim__ = nnz_X0; - for (size_t i_vec__ = 0; i_vec__ < w_X0_i_vec_lim__; ++i_vec__) { - w_X0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X0", "nnz_X0", nnz_X0); - context__.validate_dims("data initialization", "v_X0", "int", context__.to_vec(nnz_X0)); - validate_non_negative_index("v_X0", "nnz_X0", nnz_X0); - v_X0 = std::vector(nnz_X0,int(0)); - vals_i__ = context__.vals_i("v_X0"); - pos__ = 0; - size_t v_X0_limit_0__ = nnz_X0; - for (size_t i_0__ = 0; i_0__ < v_X0_limit_0__; ++i_0__) { - v_X0[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X0", "(dense_X ? 0 : (get_base1(N,1,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) )); - context__.validate_dims("data initialization", "u_X0", "int", context__.to_vec((dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ))); - validate_non_negative_index("u_X0", "(dense_X ? 0 : (get_base1(N,1,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) )); - u_X0 = std::vector((dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X0"); - pos__ = 0; - size_t u_X0_limit_0__ = (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X0_limit_0__; ++i_0__) { - u_X0[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "nnz_X1", "int", context__.to_vec()); - nnz_X1 = int(0); - vals_i__ = context__.vals_i("nnz_X1"); - pos__ = 0; - nnz_X1 = vals_i__[pos__++]; - validate_non_negative_index("w_X1", "nnz_X1", nnz_X1); - context__.validate_dims("data initialization", "w_X1", "vector_d", context__.to_vec(nnz_X1)); - validate_non_negative_index("w_X1", "nnz_X1", nnz_X1); - w_X1 = vector_d(static_cast(nnz_X1)); - vals_r__ = context__.vals_r("w_X1"); - pos__ = 0; - size_t w_X1_i_vec_lim__ = nnz_X1; - for (size_t i_vec__ = 0; i_vec__ < w_X1_i_vec_lim__; ++i_vec__) { - w_X1[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X1", "nnz_X1", nnz_X1); - context__.validate_dims("data initialization", "v_X1", "int", context__.to_vec(nnz_X1)); - validate_non_negative_index("v_X1", "nnz_X1", nnz_X1); - v_X1 = std::vector(nnz_X1,int(0)); - vals_i__ = context__.vals_i("v_X1"); - pos__ = 0; - size_t v_X1_limit_0__ = nnz_X1; - for (size_t i_0__ = 0; i_0__ < v_X1_limit_0__; ++i_0__) { - v_X1[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X1", "(dense_X ? 0 : (get_base1(N,2,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) )); - context__.validate_dims("data initialization", "u_X1", "int", context__.to_vec((dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ))); - validate_non_negative_index("u_X1", "(dense_X ? 0 : (get_base1(N,2,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) )); - u_X1 = std::vector((dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X1"); - pos__ = 0; - size_t u_X1_limit_0__ = (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X1_limit_0__; ++i_0__) { - u_X1[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("S0", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S0", "matrix_d", context__.to_vec(get_base1(N,1,"N",1),K_smooth)); - validate_non_negative_index("S0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("S0", "K_smooth", K_smooth); - S0 = matrix_d(static_cast(get_base1(N,1,"N",1)),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S0"); - pos__ = 0; - size_t S0_m_mat_lim__ = get_base1(N,1,"N",1); - size_t S0_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S0_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S0_m_mat_lim__; ++m_mat__) { - S0(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("S1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("S1", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S1", "matrix_d", context__.to_vec(get_base1(N,2,"N",1),K_smooth)); - validate_non_negative_index("S1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("S1", "K_smooth", K_smooth); - S1 = matrix_d(static_cast(get_base1(N,2,"N",1)),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S1"); - pos__ = 0; - size_t S1_m_mat_lim__ = get_base1(N,2,"N",1); - size_t S1_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S1_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S1_m_mat_lim__; ++m_mat__) { - S1(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights0", "(has_weights ? get_base1(N,1,\"N\",1) : 0 )", (has_weights ? get_base1(N,1,"N",1) : 0 )); - context__.validate_dims("data initialization", "weights0", "vector_d", context__.to_vec((has_weights ? get_base1(N,1,"N",1) : 0 ))); - validate_non_negative_index("weights0", "(has_weights ? get_base1(N,1,\"N\",1) : 0 )", (has_weights ? get_base1(N,1,"N",1) : 0 )); - weights0 = vector_d(static_cast((has_weights ? get_base1(N,1,"N",1) : 0 ))); - vals_r__ = context__.vals_r("weights0"); - pos__ = 0; - size_t weights0_i_vec_lim__ = (has_weights ? get_base1(N,1,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights0_i_vec_lim__; ++i_vec__) { - weights0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("weights1", "(has_weights ? get_base1(N,2,\"N\",1) : 0 )", (has_weights ? get_base1(N,2,"N",1) : 0 )); - context__.validate_dims("data initialization", "weights1", "vector_d", context__.to_vec((has_weights ? get_base1(N,2,"N",1) : 0 ))); - validate_non_negative_index("weights1", "(has_weights ? get_base1(N,2,\"N\",1) : 0 )", (has_weights ? get_base1(N,2,"N",1) : 0 )); - weights1 = vector_d(static_cast((has_weights ? get_base1(N,2,"N",1) : 0 ))); - vals_r__ = context__.vals_r("weights1"); - pos__ = 0; - size_t weights1_i_vec_lim__ = (has_weights ? get_base1(N,2,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights1_i_vec_lim__; ++i_vec__) { - weights1[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset0", "(has_offset ? get_base1(N,1,\"N\",1) : 0 )", (has_offset ? get_base1(N,1,"N",1) : 0 )); - context__.validate_dims("data initialization", "offset0", "vector_d", context__.to_vec((has_offset ? get_base1(N,1,"N",1) : 0 ))); - validate_non_negative_index("offset0", "(has_offset ? get_base1(N,1,\"N\",1) : 0 )", (has_offset ? get_base1(N,1,"N",1) : 0 )); - offset0 = vector_d(static_cast((has_offset ? get_base1(N,1,"N",1) : 0 ))); - vals_r__ = context__.vals_r("offset0"); - pos__ = 0; - size_t offset0_i_vec_lim__ = (has_offset ? get_base1(N,1,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset0_i_vec_lim__; ++i_vec__) { - offset0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("offset1", "(has_offset ? get_base1(N,2,\"N\",1) : 0 )", (has_offset ? get_base1(N,2,"N",1) : 0 )); - context__.validate_dims("data initialization", "offset1", "vector_d", context__.to_vec((has_offset ? get_base1(N,2,"N",1) : 0 ))); - validate_non_negative_index("offset1", "(has_offset ? get_base1(N,2,\"N\",1) : 0 )", (has_offset ? get_base1(N,2,"N",1) : 0 )); - offset1 = vector_d(static_cast((has_offset ? get_base1(N,2,"N",1) : 0 ))); - vals_r__ = context__.vals_r("offset1"); - pos__ = 0; - size_t offset1_i_vec_lim__ = (has_offset ? get_base1(N,2,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset1_i_vec_lim__; ++i_vec__) { - offset1[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - validate_non_negative_index("num_non_zero", "2", 2); - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec(2)); - validate_non_negative_index("num_non_zero", "2", 2); - num_non_zero = std::vector(2,int(0)); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - size_t num_non_zero_limit_0__ = 2; - for (size_t i_0__ = 0; i_0__ < num_non_zero_limit_0__; ++i_0__) { - num_non_zero[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("w0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - context__.validate_dims("data initialization", "w0", "vector_d", context__.to_vec(get_base1(num_non_zero,1,"num_non_zero",1))); - validate_non_negative_index("w0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - w0 = vector_d(static_cast(get_base1(num_non_zero,1,"num_non_zero",1))); - vals_r__ = context__.vals_r("w0"); - pos__ = 0; - size_t w0_i_vec_lim__ = get_base1(num_non_zero,1,"num_non_zero",1); - for (size_t i_vec__ = 0; i_vec__ < w0_i_vec_lim__; ++i_vec__) { - w0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("w1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - context__.validate_dims("data initialization", "w1", "vector_d", context__.to_vec(get_base1(num_non_zero,2,"num_non_zero",1))); - validate_non_negative_index("w1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - w1 = vector_d(static_cast(get_base1(num_non_zero,2,"num_non_zero",1))); - vals_r__ = context__.vals_r("w1"); - pos__ = 0; - size_t w1_i_vec_lim__ = get_base1(num_non_zero,2,"num_non_zero",1); - for (size_t i_vec__ = 0; i_vec__ < w1_i_vec_lim__; ++i_vec__) { - w1[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - context__.validate_dims("data initialization", "v0", "int", context__.to_vec(get_base1(num_non_zero,1,"num_non_zero",1))); - validate_non_negative_index("v0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - v0 = std::vector(get_base1(num_non_zero,1,"num_non_zero",1),int(0)); - vals_i__ = context__.vals_i("v0"); - pos__ = 0; - size_t v0_limit_0__ = get_base1(num_non_zero,1,"num_non_zero",1); - for (size_t i_0__ = 0; i_0__ < v0_limit_0__; ++i_0__) { - v0[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("v1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - context__.validate_dims("data initialization", "v1", "int", context__.to_vec(get_base1(num_non_zero,2,"num_non_zero",1))); - validate_non_negative_index("v1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - v1 = std::vector(get_base1(num_non_zero,2,"num_non_zero",1),int(0)); - vals_i__ = context__.vals_i("v1"); - pos__ = 0; - size_t v1_limit_0__ = get_base1(num_non_zero,2,"num_non_zero",1); - for (size_t i_0__ = 0; i_0__ < v1_limit_0__; ++i_0__) { - v1[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u0", "(logical_gt(t,0) ? (get_base1(N,1,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 )); - context__.validate_dims("data initialization", "u0", "int", context__.to_vec((logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ))); - validate_non_negative_index("u0", "(logical_gt(t,0) ? (get_base1(N,1,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 )); - u0 = std::vector((logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u0"); - pos__ = 0; - size_t u0_limit_0__ = (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u0_limit_0__; ++i_0__) { - u0[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u1", "(logical_gt(t,0) ? (get_base1(N,2,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 )); - context__.validate_dims("data initialization", "u1", "int", context__.to_vec((logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ))); - validate_non_negative_index("u1", "(logical_gt(t,0) ? (get_base1(N,2,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 )); - u1 = std::vector((logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u1"); - pos__ = 0; - size_t u1_limit_0__ = (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u1_limit_0__; ++i_0__) { - u1[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"K",K,0); - for (int k0__ = 0; k0__ < 2; ++k0__) { - check_greater_or_equal(function__,"N[k0__]",N[k0__],1); - } - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X0",nnz_X0,0); - for (int k0__ = 0; k0__ < nnz_X0; ++k0__) { - check_greater_or_equal(function__,"v_X0[k0__]",v_X0[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X0[k0__]",u_X0[k0__],0); - } - check_greater_or_equal(function__,"nnz_X1",nnz_X1,0); - for (int k0__ = 0; k0__ < nnz_X1; ++k0__) { - check_greater_or_equal(function__,"v_X1[k0__]",v_X1[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X1[k0__]",u_X1[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - for (int k0__ = 0; k0__ < 2; ++k0__) { - check_greater_or_equal(function__,"num_non_zero[k0__]",num_non_zero[k0__],0); - } - for (int k0__ = 0; k0__ < get_base1(num_non_zero,1,"num_non_zero",1); ++k0__) { - check_greater_or_equal(function__,"v0[k0__]",v0[k0__],0); - } - for (int k0__ = 0; k0__ < get_base1(num_non_zero,2,"num_non_zero",1); ++k0__) { - check_greater_or_equal(function__,"v1[k0__]",v1[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u0[k0__]",u0[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u1[k0__]",u1[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - // initialize data variables - NN = int(0); - stan::math::fill(NN, std::numeric_limits::min()); - stan::math::assign(NN,(get_base1(N,1,"N",1) + get_base1(N,2,"N",1))); - aux = double(0); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::not_a_number()); - validate_non_negative_index("V0", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - V0 = std::vector >((special_case ? t : 0 ),std::vector(get_base1(N,1,"N",1),int(0))); - stan::math::fill(V0, std::numeric_limits::min()); - stan::math::assign(V0,make_V(get_base1(N,1,"N",1),(special_case ? t : 0 ),v0, pstream__)); - validate_non_negative_index("V1", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - V1 = std::vector >((special_case ? t : 0 ),std::vector(get_base1(N,2,"N",1),int(0))); - stan::math::fill(V1, std::numeric_limits::min()); - stan::math::assign(V1,make_V(get_base1(N,2,"N",1),(special_case ? t : 0 ),v1, pstream__)); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - if (as_bool(logical_lte(prior_dist,2))) { - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - stan::math::assign(hs, 4); - } else { - stan::math::assign(hs, 0); - } - stan::math::assign(pos, 1); - for (int i = 1; i <= t; ++i) { - - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - stan::math::assign(pos, (pos + 1)); - } - } - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < get_base1(N,1,"N",1); ++k1__) { - check_greater_or_equal(function__,"V0[k0__][k1__]",V0[k0__][k1__],1); - } - } - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < get_base1(N,2,"N",1); ++k1__) { - check_greater_or_equal(function__,"V1[k0__][k1__]",V1[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - } - - ~model_bernoulli() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_ub_unconstrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),lp__)); - else - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, elt_multiply(scale,tau)); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - Eigen::Matrix eta0(static_cast(get_base1(N,1,"N",1))); - (void) eta0; // dummy to suppress unused var warning - - stan::math::initialize(eta0, DUMMY_VAR__); - stan::math::fill(eta0,DUMMY_VAR__); - validate_non_negative_index("eta1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - Eigen::Matrix eta1(static_cast(get_base1(N,2,"N",1))); - (void) eta1; // dummy to suppress unused var warning - - stan::math::initialize(eta1, DUMMY_VAR__); - stan::math::fill(eta1,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - - stan::math::assign(eta0, multiply(get_base1(X0,1,"X0",1),beta)); - stan::math::assign(eta1, multiply(get_base1(X1,1,"X1",1),beta)); - } else { - - stan::math::assign(eta0, csr_matrix_times_vector(get_base1(N,1,"N",1),K,w_X0,v_X0,u_X0,beta)); - stan::math::assign(eta1, csr_matrix_times_vector(get_base1(N,2,"N",1),K,w_X1,v_X1,u_X1,beta)); - } - } else { - - stan::math::assign(eta0, rep_vector(0.0,get_base1(N,1,"N",1))); - stan::math::assign(eta1, rep_vector(0.0,get_base1(N,2,"N",1))); - } - if (as_bool((primitive_value(logical_eq(has_intercept,0)) && primitive_value(dense_X)))) { - { - T__ tmp; - (void) tmp; // dummy to suppress unused var warning - - stan::math::initialize(tmp, DUMMY_VAR__); - stan::math::fill(tmp,DUMMY_VAR__); - - - stan::math::assign(tmp, dot_product(xbar,beta)); - stan::math::assign(eta0, add(eta0,tmp)); - stan::math::assign(eta1, add(eta1,tmp)); - } - } - if (as_bool(logical_eq(has_offset,1))) { - - stan::math::assign(eta0, add(eta0,offset0)); - stan::math::assign(eta1, add(eta1,offset1)); - } - if (as_bool(K_smooth)) { - - stan::math::assign(eta0, add(eta0,multiply(S0,beta_smooth))); - stan::math::assign(eta1, add(eta1,multiply(S1,beta_smooth))); - } - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(eta0, add(eta0,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V0,i,"V0",1)), stan::model::nil_index_list()), "b"))); - stan::math::assign(eta1, add(eta1,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V1,i,"V1",1)), stan::model::nil_index_list()), "b"))); - } - } else if (as_bool(logical_gt(t,0))) { - - stan::math::assign(eta0, add(eta0,csr_matrix_times_vector(get_base1(N,1,"N",1),q,w0,v0,u0,b))); - stan::math::assign(eta1, add(eta1,csr_matrix_times_vector(get_base1(N,2,"N",1),q,w1,v1,u1,b))); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_neq(link,4))) { - - stan::math::assign(eta0, add(get_base1(gamma,1,"gamma",1),eta0)); - stan::math::assign(eta1, add(get_base1(gamma,1,"gamma",1),eta1)); - } else { - { - T__ shift; - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, DUMMY_VAR__); - stan::math::fill(shift,DUMMY_VAR__); - - - stan::math::assign(shift, stan::math::fmax(max(eta0),max(eta1))); - stan::math::assign(eta0, subtract(add(get_base1(gamma,1,"gamma",1),eta0),shift)); - stan::math::assign(eta1, subtract(add(get_base1(gamma,1,"gamma",1),eta1),shift)); - } - } - } - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - { - T__ dummy; - (void) dummy; // dummy to suppress unused var warning - - stan::math::initialize(dummy, DUMMY_VAR__); - stan::math::fill(dummy,DUMMY_VAR__); - - - stan::math::assign(dummy, ll_bern_lp(eta0,eta1,link,N, lp__, lp_accum__, pstream__)); - } - } else if (as_bool(logical_eq(prior_PD,0))) { - - lp_accum__.add(dot_product(weights0,pw_bern(0,eta0,link, pstream__))); - lp_accum__.add(dot_product(weights1,pw_bern(1,eta1,link, pstream__))); - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - if (as_bool(K_smooth)) { - - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - if (as_bool(logical_gt(t,0))) { - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_bernoulli_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, elt_multiply(scale,tau)); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(dense_X)) { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - { - validate_non_negative_index("pi0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - vector_d pi0(static_cast(get_base1(N,1,"N",1))); - (void) pi0; // dummy to suppress unused var warning - - stan::math::initialize(pi0, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi0,DUMMY_VAR__); - validate_non_negative_index("pi1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - vector_d pi1(static_cast(get_base1(N,2,"N",1))); - (void) pi1; // dummy to suppress unused var warning - - stan::math::initialize(pi1, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi1,DUMMY_VAR__); - validate_non_negative_index("eta0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - vector_d eta0(static_cast(get_base1(N,1,"N",1))); - (void) eta0; // dummy to suppress unused var warning - - stan::math::initialize(eta0, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta0,DUMMY_VAR__); - validate_non_negative_index("eta1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - vector_d eta1(static_cast(get_base1(N,2,"N",1))); - (void) eta1; // dummy to suppress unused var warning - - stan::math::initialize(eta1, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta1,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - - stan::math::assign(eta0, multiply(get_base1(X0,1,"X0",1),beta)); - stan::math::assign(eta1, multiply(get_base1(X1,1,"X1",1),beta)); - } else { - - stan::math::assign(eta0, csr_matrix_times_vector(get_base1(N,1,"N",1),K,w_X0,v_X0,u_X0,beta)); - stan::math::assign(eta1, csr_matrix_times_vector(get_base1(N,2,"N",1),K,w_X1,v_X1,u_X1,beta)); - } - } else { - - stan::math::assign(eta0, rep_vector(0.0,get_base1(N,1,"N",1))); - stan::math::assign(eta1, rep_vector(0.0,get_base1(N,2,"N",1))); - } - if (as_bool((primitive_value(logical_eq(has_intercept,0)) && primitive_value(dense_X)))) { - { - double tmp(0.0); - (void) tmp; // dummy to suppress unused var warning - - stan::math::initialize(tmp, std::numeric_limits::quiet_NaN()); - stan::math::fill(tmp,DUMMY_VAR__); - - - stan::math::assign(tmp, dot_product(xbar,beta)); - stan::math::assign(eta0, add(eta0,tmp)); - stan::math::assign(eta1, add(eta1,tmp)); - } - } - if (as_bool(logical_eq(has_offset,1))) { - - stan::math::assign(eta0, add(eta0,offset0)); - stan::math::assign(eta1, add(eta1,offset1)); - } - if (as_bool(K_smooth)) { - - stan::math::assign(eta0, add(eta0,multiply(S0,beta_smooth))); - stan::math::assign(eta1, add(eta1,multiply(S1,beta_smooth))); - } - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(eta0, add(eta0,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V0,i,"V0",1)), stan::model::nil_index_list()), "b"))); - stan::math::assign(eta1, add(eta1,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V1,i,"V1",1)), stan::model::nil_index_list()), "b"))); - } - } else if (as_bool(logical_gt(t,0))) { - - stan::math::assign(eta0, add(eta0,csr_matrix_times_vector(get_base1(N,1,"N",1),q,w0,v0,u0,b))); - stan::math::assign(eta1, add(eta1,csr_matrix_times_vector(get_base1(N,2,"N",1),q,w1,v1,u1,b))); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_neq(link,4))) { - - stan::math::assign(eta0, add(get_base1(gamma,1,"gamma",1),eta0)); - stan::math::assign(eta1, add(get_base1(gamma,1,"gamma",1),eta1)); - } else { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - stan::math::assign(shift, stan::math::fmax(max(eta0),max(eta1))); - stan::math::assign(eta0, subtract(add(get_base1(gamma,1,"gamma",1),eta0),shift)); - stan::math::assign(eta1, subtract(add(get_base1(gamma,1,"gamma",1),eta1),shift)); - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - shift)); - } - } - } - stan::math::assign(pi0, linkinv_bern(eta0,link, pstream__)); - stan::math::assign(pi1, linkinv_bern(eta1,link, pstream__)); - for (int n = 1; n <= get_base1(N,1,"N",1); ++n) { - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(get_base1(pi0,n,"pi0",1), base_rng__))); - } - for (int n = 1; n <= get_base1(N,2,"N",1); ++n) { - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(get_base1(pi1,n,"pi1",1), base_rng__))); - } - stan::math::assign(mean_PPD, (mean_PPD / NN)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_bernoulli"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_binomial_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_binomial"); - reader.add_event(690, 690, "end", "model_binomial"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - stan::math::assign(pi, divide(pi,sum(pi))); - stan::math::assign(zeta_mark, (zeta_mark + nc)); - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - stan::math::assign(rho_mark, (rho_mark + 1)); - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - stan::math::assign(z_T_mark, (z_T_mark + r)); - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - for (int c = 1; c <= r; ++c) { - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - for (int c = 1; c <= nc; ++c) { - for (int r = c; r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - for (int c = 1; c <= nc; ++c) { - - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - for (int r = (c + 1); r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - stan::math::assign(b_mark, (b_mark - 1)); - for (int s = 1; s <= nc; ++s) { - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - lp_accum__.add(normal_log(z_b,0,1)); - lp_accum__.add(normal_log(z_T,0,1)); - for (int i = 1; i <= t; ++i) { - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - stan::math::assign(pos_reg, (pos_reg + 1)); - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - stan::math::assign(nu, (nu - 0.5)); - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - lp_accum__.add(gamma_log(zeta,delta,1)); - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - stan::math::assign(K, rows(z_beta)); - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - if (as_bool(logical_gt(t,0))) { - for (int j = 1; j <= N; ++j) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - stan::math::assign(pos, (pos + 1)); - } - } - } - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_binom(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(add(divide(atan(eta),stan::math::pi()),0.5)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,5))) { - return stan::math::promote_scalar(inv_cloglog(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_binom(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -ll_binom_lp(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - lp_accum__.add(binomial_logit_log(y,trials,eta)); - } else if (as_bool(logical_lt(link,4))) { - lp_accum__.add(binomial_log(y,trials,linkinv_binom(eta,link, pstream__))); - } else if (as_bool(logical_eq(link,4))) { - - for (int n = 1; n <= num_elements(y); ++n) { - - lp_accum__.add((get_base1(y,n,"y",1) * get_base1(eta,n,"eta",1))); - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * log1m_exp(get_base1(eta,n,"eta",1)))); - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } else if (as_bool(logical_eq(link,5))) { - - for (int n = 1; n <= num_elements(y); ++n) { - { - fun_scalar_t__ neg_exp_eta; - (void) neg_exp_eta; // dummy to suppress unused var warning - - stan::math::initialize(neg_exp_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(neg_exp_eta,DUMMY_VAR__); - stan::math::assign(neg_exp_eta,-(exp(get_base1(eta,n,"eta",1)))); - - - lp_accum__.add((get_base1(y,n,"y",1) * log1m_exp(neg_exp_eta))); - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * neg_exp_eta)); - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_binom_lp_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_binom_lp(y, trials, eta, link, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_binom(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,1))) { - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_logit_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,5))) { - { - validate_non_negative_index("pi", "N", N); - Eigen::Matrix pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,linkinv_binom(eta,link, pstream__)); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(pi,n,"pi",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_binom(y, trials, eta, link, pstream__); - } -}; - -class model_binomial : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - vector y; - vector trials; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - int num_non_zero; - vector_d w; - vector v; - vector u; - int special_case; - double aux; - vector > V; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_binomial(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_binomial(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_binomial_namespace::model_binomial"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y", "N", N); - context__.validate_dims("data initialization", "y", "int", context__.to_vec(N)); - validate_non_negative_index("y", "N", N); - y = std::vector(N,int(0)); - vals_i__ = context__.vals_i("y"); - pos__ = 0; - size_t y_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < y_limit_0__; ++i_0__) { - y[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("trials", "N", N); - context__.validate_dims("data initialization", "trials", "int", context__.to_vec(N)); - validate_non_negative_index("trials", "N", N); - trials = std::vector(N,int(0)); - vals_i__ = context__.vals_i("trials"); - pos__ = 0; - size_t trials_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < trials_limit_0__; ++i_0__) { - trials[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec()); - num_non_zero = int(0); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - num_non_zero = vals_i__[pos__++]; - validate_non_negative_index("w", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec(num_non_zero)); - validate_non_negative_index("w", "num_non_zero", num_non_zero); - w = vector_d(static_cast(num_non_zero)); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = num_non_zero; - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "v", "int", context__.to_vec(num_non_zero)); - validate_non_negative_index("v", "num_non_zero", num_non_zero); - v = std::vector(num_non_zero,int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = num_non_zero; - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_gt(t,0) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - u = std::vector((logical_gt(t,0) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_gt(t,0) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"y[k0__]",y[k0__],0); - } - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"trials[k0__]",trials[k0__],0); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - check_greater_or_equal(function__,"num_non_zero",num_non_zero,0); - for (int k0__ = 0; k0__ < num_non_zero; ++k0__) { - check_greater_or_equal(function__,"v[k0__]",v[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (N + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u[k0__]",u[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - // initialize data variables - aux = double(0); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::not_a_number()); - validate_non_negative_index("V", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V", "N", N); - V = std::vector >((special_case ? t : 0 ),std::vector(N,int(0))); - stan::math::fill(V, std::numeric_limits::min()); - stan::math::assign(V,make_V(N,(special_case ? t : 0 ),v, pstream__)); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - if (as_bool(logical_lte(prior_dist,2))) { - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - stan::math::assign(hs, 4); - } else { - stan::math::assign(hs, 0); - } - stan::math::assign(pos, 1); - for (int i = 1; i <= t; ++i) { - - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - stan::math::assign(pos, (pos + 1)); - } - } - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < N; ++k1__) { - check_greater_or_equal(function__,"V[k0__][k1__]",V[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - } - - ~model_binomial() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_ub_unconstrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),lp__)); - else - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, elt_multiply(scale,tau)); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_neq(link,4))) { - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - stan::math::assign(eta, subtract(add(get_base1(gamma,1,"gamma",1),eta),max(eta))); - } - } else { - - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - { - T__ dummy; - (void) dummy; // dummy to suppress unused var warning - - stan::math::initialize(dummy, DUMMY_VAR__); - stan::math::fill(dummy,DUMMY_VAR__); - - - stan::math::assign(dummy, ll_binom_lp(y,trials,eta,link, lp__, lp_accum__, pstream__)); - } - } else if (as_bool(logical_eq(prior_PD,0))) { - lp_accum__.add(dot_product(weights,pw_binom(y,trials,eta,link, pstream__))); - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - if (as_bool(K_smooth)) { - - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - if (as_bool(logical_gt(t,0))) { - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_binomial_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, elt_multiply(scale,tau)); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(dense_X)) { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - { - validate_non_negative_index("pi", "N", N); - vector_d pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_neq(link,4))) { - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - stan::math::assign(shift, max(eta)); - stan::math::assign(eta, subtract(add(get_base1(gamma,1,"gamma",1),eta),shift)); - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - shift)); - } - } - } else { - - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - stan::math::assign(pi, linkinv_binom(eta,link, pstream__)); - for (int n = 1; n <= N; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + binomial_rng(get_base1(trials,n,"trials",1),get_base1(pi,n,"pi",1), base_rng__))); - } - stan::math::assign(mean_PPD, (mean_PPD / N)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_binomial"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_continuous_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_continuous"); - reader.add_event(1369, 1369, "end", "model_continuous"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - stan::math::assign(pi, divide(pi,sum(pi))); - stan::math::assign(zeta_mark, (zeta_mark + nc)); - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - stan::math::assign(rho_mark, (rho_mark + 1)); - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - stan::math::assign(z_T_mark, (z_T_mark + r)); - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - for (int c = 1; c <= r; ++c) { - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - for (int c = 1; c <= nc; ++c) { - for (int r = c; r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - for (int c = 1; c <= nc; ++c) { - - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - for (int r = (c + 1); r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - stan::math::assign(b_mark, (b_mark - 1)); - for (int s = 1; s <= nc; ++s) { - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - lp_accum__.add(normal_log(z_b,0,1)); - lp_accum__.add(normal_log(z_T,0,1)); - for (int i = 1; i <= t; ++i) { - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - stan::math::assign(pos_reg, (pos_reg + 1)); - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - stan::math::assign(nu, (nu - 0.5)); - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - lp_accum__.add(gamma_log(zeta,delta,1)); - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - stan::math::assign(K, rows(z_beta)); - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - if (as_bool(logical_gt(t,0))) { - for (int j = 1; j <= N; ++j) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - stan::math::assign(pos, (pos + 1)); - } - } - } - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gauss(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gauss(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gauss(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(subtract((-(0.5) * log((6.2831853071795862 * sigma))),multiply(0.5,square(divide(subtract(y,linkinv_gauss(eta,link, pstream__)),sigma))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) const { - return pw_gauss(y, eta, sigma, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gamma(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gamma(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -GammaReg(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ ret; - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - stan::math::assign(ret,((rows(y) * ((shape * log(shape)) - stan::math::lgamma(shape))) + ((shape - 1) * sum_log_y))); - - - if (as_bool(logical_eq(link,2))) { - stan::math::assign(ret, ((ret - (shape * sum(eta))) - (shape * sum(elt_divide(y,exp(eta)))))); - } else if (as_bool(logical_eq(link,1))) { - stan::math::assign(ret, ((ret - (shape * sum(log(eta)))) - (shape * sum(elt_divide(y,eta))))); - } else if (as_bool(logical_eq(link,3))) { - stan::math::assign(ret, ((ret + (shape * sum(log(eta)))) - (shape * dot_product(eta,y)))); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct GammaReg_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) const { - return GammaReg(y, eta, shape, link, sum_log_y, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gamma(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,3))) { - - for (int n = 1; n <= N; ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape * get_base1(eta,n,"eta",1)))); - } - } else if (as_bool(logical_eq(link,2))) { - - for (int n = 1; n <= N; ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / exp(get_base1(eta,n,"eta",1))))); - } - } else if (as_bool(logical_eq(link,1))) { - - for (int n = 1; n <= N; ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / get_base1(eta,n,"eta",1)))); - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) const { - return pw_gamma(y, eta, shape, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_inv_gaussian(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv(eta)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(inv_sqrt(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_inv_gaussian_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_inv_gaussian(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type>::type -inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(((((0.5 * rows(y)) * log((lambda / 6.2831853071795862))) - (1.5 * sum_log_y)) - ((0.5 * lambda) * dot_self(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_functor__ { - template - typename boost::math::tools::promote_args::type>::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return inv_gaussian(y, mu, lambda, sum_log_y, sqrt_y, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -pw_inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_inv_gaussian(eta,link, pstream__)); - - - return stan::math::promote_scalar(subtract(add(multiply((-(0.5) * lambda),square(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))),(0.5 * log((lambda / 6.2831853071795862)))),multiply(1.5,log_y))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_inv_gaussian_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return pw_inv_gaussian(y, eta, lambda, link, log_y, sqrt_y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -inv_gaussian_rng(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ mu2; - (void) mu2; // dummy to suppress unused var warning - - stan::math::initialize(mu2, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu2,DUMMY_VAR__); - stan::math::assign(mu2,square(mu)); - fun_scalar_t__ z; - (void) z; // dummy to suppress unused var warning - - stan::math::initialize(z, std::numeric_limits::quiet_NaN()); - stan::math::fill(z,DUMMY_VAR__); - stan::math::assign(z,uniform_rng(0,1, base_rng__)); - fun_scalar_t__ y; - (void) y; // dummy to suppress unused var warning - - stan::math::initialize(y, std::numeric_limits::quiet_NaN()); - stan::math::fill(y,DUMMY_VAR__); - stan::math::assign(y,square(normal_rng(0,1, base_rng__))); - fun_scalar_t__ x; - (void) x; // dummy to suppress unused var warning - - stan::math::initialize(x, std::numeric_limits::quiet_NaN()); - stan::math::fill(x,DUMMY_VAR__); - stan::math::assign(x,(mu + (((mu2 * y) - (mu * sqrt(((((4 * mu) * lambda) * y) + (mu2 * square(y)))))) / (2 * lambda)))); - - - if (as_bool(logical_lte(z,(mu / (mu + x))))) { - return stan::math::promote_scalar(x); - } else { - return stan::math::promote_scalar((mu2 / x)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_rng_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) const { - return inv_gaussian_rng(mu, lambda, base_rng__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv_cloglog(eta)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(add(0.5,divide(atan(eta),stan::math::pi()))); - } else if (as_bool(logical_eq(link,5))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,6))) { - return stan::math::promote_scalar(subtract(1,inv_cloglog(minus(eta)))); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta_z(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(square(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta_z(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - - - for (int n = 1; n <= rows(y); ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * dispersion),((1 - get_base1(mu,n,"mu",1)) * dispersion))); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) const { - return pw_beta(y, eta, dispersion, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta_z(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - validate_non_negative_index("mu_z", "rows(y)", rows(y)); - Eigen::Matrix mu_z(static_cast(rows(y))); - (void) mu_z; // dummy to suppress unused var warning - - stan::math::initialize(mu_z, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu_z,DUMMY_VAR__); - stan::math::assign(mu_z,linkinv_beta_z(eta_z,link_phi, pstream__)); - - - for (int n = 1; n <= rows(y); ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * get_base1(mu_z,n,"mu_z",1)),((1 - get_base1(mu,n,"mu",1)) * get_base1(mu_z,n,"mu_z",1)))); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) const { - return pw_beta_z(y, eta, eta_z, link, link_phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asymp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOff(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOrig(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_biexp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fol(const Eigen::Matrix& Dose, - const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fpl(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_gompertz(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_logis(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_micmen(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_weibull(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asymp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - { - validate_non_negative_index("Asym", "rows(Phi)", rows(Phi)); - Eigen::Matrix Asym(static_cast(rows(Phi))); - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi")); - - - return stan::math::promote_scalar(add(Asym,elt_multiply(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),Asym),exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"))),input))))); - } - } else { - { - fun_scalar_t__ Asym; - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,get_base1(Phi,1,1,"Phi",1)); - - - return stan::math::promote_scalar(add(Asym,multiply((get_base1(Phi,1,2,"Phi",1) - Asym),exp(multiply(-(exp(get_base1(Phi,1,3,"Phi",1))),input))))); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_asymp_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_asymp(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOff(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - return stan::math::promote_scalar(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),subtract(1,exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"))),subtract(input,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"))))))); - } else { - return stan::math::promote_scalar(multiply(get_base1(Phi,1,1,"Phi",1),subtract(1,exp(multiply(-(exp(get_base1(Phi,1,2,"Phi",1))),subtract(input,get_base1(Phi,1,3,"Phi",1))))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_asympOff_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_asympOff(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOrig(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - return stan::math::promote_scalar(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),subtract(1,exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"))),input))))); - } else { - return stan::math::promote_scalar(multiply(get_base1(Phi,1,1,"Phi",1),subtract(1,exp(multiply(-(exp(get_base1(Phi,1,2,"Phi",1))),input))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_asympOrig_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_asympOrig(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_biexp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - return stan::math::promote_scalar(add(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"))),input))),elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"),exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(4), stan::model::nil_index_list())), "Phi"))),input))))); - } else { - return stan::math::promote_scalar(add(multiply(get_base1(Phi,1,1,"Phi",1),exp(multiply(-(exp(get_base1(Phi,1,2,"Phi",1))),input))),multiply(get_base1(Phi,1,3,"Phi",1),exp(multiply(-(exp(get_base1(Phi,1,4,"Phi",1))),input))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_biexp_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_biexp(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fol(const Eigen::Matrix& Dose, - const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int Phi_rows(0); - (void) Phi_rows; // dummy to suppress unused var warning - - stan::math::fill(Phi_rows, std::numeric_limits::min()); - stan::math::assign(Phi_rows,rows(Phi)); - - - if (as_bool(logical_gt(Phi_rows,1))) { - { - validate_non_negative_index("lKe", "Phi_rows", Phi_rows); - Eigen::Matrix lKe(static_cast(Phi_rows)); - (void) lKe; // dummy to suppress unused var warning - - stan::math::initialize(lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKe,DUMMY_VAR__); - stan::math::assign(lKe,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi")); - validate_non_negative_index("lKa", "Phi_rows", Phi_rows); - Eigen::Matrix lKa(static_cast(Phi_rows)); - (void) lKa; // dummy to suppress unused var warning - - stan::math::initialize(lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKa,DUMMY_VAR__); - stan::math::assign(lKa,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi")); - validate_non_negative_index("exp_lKe", "Phi_rows", Phi_rows); - Eigen::Matrix exp_lKe(static_cast(Phi_rows)); - (void) exp_lKe; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKe,DUMMY_VAR__); - stan::math::assign(exp_lKe,exp(lKe)); - validate_non_negative_index("exp_lKa", "Phi_rows", Phi_rows); - Eigen::Matrix exp_lKa(static_cast(Phi_rows)); - (void) exp_lKa; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKa,DUMMY_VAR__); - stan::math::assign(exp_lKa,exp(lKa)); - - - return stan::math::promote_scalar(elt_divide(elt_multiply(elt_multiply(Dose,exp(subtract(add(lKe,lKa),stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi")))),subtract(exp(elt_multiply(minus(exp_lKe),input)),exp(elt_multiply(minus(exp_lKa),input)))),subtract(exp_lKa,exp_lKe))); - } - } else { - { - fun_scalar_t__ lKe; - (void) lKe; // dummy to suppress unused var warning - - stan::math::initialize(lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKe,DUMMY_VAR__); - stan::math::assign(lKe,get_base1(Phi,1,1,"Phi",1)); - fun_scalar_t__ lKa; - (void) lKa; // dummy to suppress unused var warning - - stan::math::initialize(lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKa,DUMMY_VAR__); - stan::math::assign(lKa,get_base1(Phi,1,2,"Phi",1)); - fun_scalar_t__ exp_lKe; - (void) exp_lKe; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKe,DUMMY_VAR__); - stan::math::assign(exp_lKe,exp(lKe)); - fun_scalar_t__ exp_lKa; - (void) exp_lKa; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKa,DUMMY_VAR__); - stan::math::assign(exp_lKa,exp(lKa)); - - - return stan::math::promote_scalar(divide(elt_multiply(multiply(Dose,exp(((lKe + lKa) - get_base1(Phi,1,3,"Phi",1)))),subtract(exp(multiply(-(exp_lKe),input)),exp(multiply(-(exp_lKa),input)))),(exp_lKa - exp_lKe))); - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_fol_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& Dose, - const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_fol(Dose, input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fpl(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - { - validate_non_negative_index("A", "rows(Phi)", rows(Phi)); - Eigen::Matrix A(static_cast(rows(Phi))); - (void) A; // dummy to suppress unused var warning - - stan::math::initialize(A, std::numeric_limits::quiet_NaN()); - stan::math::fill(A,DUMMY_VAR__); - stan::math::assign(A,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi")); - - - return stan::math::promote_scalar(add(A,elt_divide(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),A),add(1,exp(elt_divide(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"),input),exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(4), stan::model::nil_index_list())), "Phi")))))))); - } - } else { - { - fun_scalar_t__ A; - (void) A; // dummy to suppress unused var warning - - stan::math::initialize(A, std::numeric_limits::quiet_NaN()); - stan::math::fill(A,DUMMY_VAR__); - stan::math::assign(A,get_base1(Phi,1,1,"Phi",1)); - - - return stan::math::promote_scalar(add(A,elt_divide(rep_vector((get_base1(Phi,1,2,"Phi",1) - A),rows(input)),add(1,exp(divide(subtract(get_base1(Phi,1,3,"Phi",1),input),exp(get_base1(Phi,1,4,"Phi",1)))))))); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_fpl_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_fpl(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_gompertz(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("out", "rows(x)", rows(x)); - Eigen::Matrix out(static_cast(rows(x))); - (void) out; // dummy to suppress unused var warning - - stan::math::initialize(out, std::numeric_limits::quiet_NaN()); - stan::math::fill(out,DUMMY_VAR__); - - - if (as_bool(logical_gt(rows(Phi),1))) { - for (int i = 1; i <= rows(x); ++i) { - stan::math::assign(get_base1_lhs(out,i,"out",1), (get_base1(Phi,i,1,"Phi",1) * exp((-(get_base1(Phi,i,2,"Phi",1)) * pow(get_base1(Phi,i,3,"Phi",1),get_base1(x,i,"x",1)))))); - } - } else { - { - fun_scalar_t__ Asym; - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,get_base1(Phi,1,1,"Phi",1)); - fun_scalar_t__ b2; - (void) b2; // dummy to suppress unused var warning - - stan::math::initialize(b2, std::numeric_limits::quiet_NaN()); - stan::math::fill(b2,DUMMY_VAR__); - stan::math::assign(b2,get_base1(Phi,1,2,"Phi",1)); - fun_scalar_t__ b3; - (void) b3; // dummy to suppress unused var warning - - stan::math::initialize(b3, std::numeric_limits::quiet_NaN()); - stan::math::fill(b3,DUMMY_VAR__); - stan::math::assign(b3,get_base1(Phi,1,3,"Phi",1)); - - - for (int i = 1; i <= rows(x); ++i) { - stan::math::assign(get_base1_lhs(out,i,"out",1), (Asym * exp((-(b2) * pow(b3,get_base1(x,i,"x",1)))))); - } - } - } - return stan::math::promote_scalar(out); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_gompertz_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_gompertz(x, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_logis(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - return stan::math::promote_scalar(elt_divide(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),add(1,exp(elt_divide(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),input),exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"))))))); - } else { - return stan::math::promote_scalar(elt_divide(rep_vector(get_base1(Phi,1,1,"Phi",1),rows(input)),add(1,exp(divide(subtract(get_base1(Phi,1,2,"Phi",1),input),exp(get_base1(Phi,1,3,"Phi",1))))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_logis_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_logis(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_micmen(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_gt(rows(Phi),1))) { - return stan::math::promote_scalar(elt_divide(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),input),add(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),input))); - } else { - return stan::math::promote_scalar(elt_divide(multiply(get_base1(Phi,1,1,"Phi",1),input),add(get_base1(Phi,1,2,"Phi",1),input))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_micmen_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_micmen(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_weibull(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("out", "rows(x)", rows(x)); - Eigen::Matrix out(static_cast(rows(x))); - (void) out; // dummy to suppress unused var warning - - stan::math::initialize(out, std::numeric_limits::quiet_NaN()); - stan::math::fill(out,DUMMY_VAR__); - - - if (as_bool(logical_gt(rows(Phi),1))) { - for (int i = 1; i <= rows(x); ++i) { - stan::math::assign(get_base1_lhs(out,i,"out",1), (get_base1(Phi,i,1,"Phi",1) - (get_base1(Phi,i,2,"Phi",1) * exp((-(exp(get_base1(Phi,i,3,"Phi",1))) * pow(get_base1(x,i,"x",1),get_base1(Phi,i,4,"Phi",1))))))); - } - } else { - { - fun_scalar_t__ Asym; - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,get_base1(Phi,1,1,"Phi",1)); - fun_scalar_t__ Drop; - (void) Drop; // dummy to suppress unused var warning - - stan::math::initialize(Drop, std::numeric_limits::quiet_NaN()); - stan::math::fill(Drop,DUMMY_VAR__); - stan::math::assign(Drop,get_base1(Phi,1,2,"Phi",1)); - fun_scalar_t__ lrc; - (void) lrc; // dummy to suppress unused var warning - - stan::math::initialize(lrc, std::numeric_limits::quiet_NaN()); - stan::math::fill(lrc,DUMMY_VAR__); - stan::math::assign(lrc,get_base1(Phi,1,3,"Phi",1)); - fun_scalar_t__ pwr; - (void) pwr; // dummy to suppress unused var warning - - stan::math::initialize(pwr, std::numeric_limits::quiet_NaN()); - stan::math::fill(pwr,DUMMY_VAR__); - stan::math::assign(pwr,get_base1(Phi,1,4,"Phi",1)); - - - for (int i = 1; i <= rows(x); ++i) { - stan::math::assign(get_base1_lhs(out,i,"out",1), (Asym - (Drop * exp((-(exp(lrc)) * pow(get_base1(x,i,"x",1),pwr)))))); - } - } - } - return stan::math::promote_scalar(out); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_weibull_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_weibull(x, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,Eigen::Dynamic> -reshape_vec(const Eigen::Matrix& x, - const int& Rows, - const int& Cols, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("out", "Rows", Rows); - validate_non_negative_index("out", "Cols", Cols); - Eigen::Matrix out(static_cast(Rows),static_cast(Cols)); - (void) out; // dummy to suppress unused var warning - - stan::math::initialize(out, std::numeric_limits::quiet_NaN()); - stan::math::fill(out,DUMMY_VAR__); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - if (as_bool(logical_neq(rows(x),(Rows * Cols)))) { - std::stringstream errmsg_stream__; - errmsg_stream__ << "x is the wrong length"; - throw std::domain_error(errmsg_stream__.str()); - } - for (int c = 1; c <= Cols; ++c) { - for (int r = 1; r <= Rows; ++r) { - - stan::math::assign(get_base1_lhs(out,r,c,"out",1), get_base1(x,pos,"x",1)); - stan::math::assign(pos, (pos + 1)); - } - } - return stan::math::promote_scalar(out); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct reshape_vec_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,Eigen::Dynamic> - operator()(const Eigen::Matrix& x, - const int& Rows, - const int& Cols, std::ostream* pstream__) const { - return reshape_vec(x, Rows, Cols, pstream__); - } -}; - -double -make_lower(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(family,1))) { - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - if (as_bool(logical_lte(family,3))) { - - if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - return stan::math::promote_scalar(0); - } - return stan::math::promote_scalar(stan::math::negative_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_lower_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_lower(family, link, pstream__); - } -}; - -double -make_upper(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,5))))) { - return stan::math::promote_scalar(0); - } - return stan::math::promote_scalar(stan::math::positive_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_upper_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_upper(family, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -test_csr_matrix_times_vector(const int& m, - const int& n, - const Eigen::Matrix& w, - const std::vector& v, - const std::vector& u, - const Eigen::Matrix& b, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(csr_matrix_times_vector(m,n,w,v,u,b)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct test_csr_matrix_times_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const int& m, - const int& n, - const Eigen::Matrix& w, - const std::vector& v, - const std::vector& u, - const Eigen::Matrix& b, std::ostream* pstream__) const { - return test_csr_matrix_times_vector(m, n, w, v, u, b, pstream__); - } -}; - -class model_continuous : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - int len_y; - double lb_y; - double ub_y; - vector_d y; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - int num_non_zero; - vector_d w; - vector v; - vector u; - int special_case; - int has_intercept_z; - int link_phi; - int z_dim; - matrix_d betareg_z; - row_vector_d zbar; - int prior_dist_z; - int prior_dist_for_intercept_z; - vector_d prior_scale_z; - double prior_scale_for_intercept_z; - vector_d prior_mean_z; - double prior_mean_for_intercept_z; - vector_d prior_df_z; - double prior_df_for_intercept_z; - double global_prior_scale_z; - vector num_normals_z; - int SSfun; - vector_d input; - vector_d Dose; - vector_d sqrt_y; - vector_d log_y; - double sum_log_y; - vector > V; - int hs_z; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_continuous(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_continuous(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_continuous_namespace::model_continuous"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "len_y", "int", context__.to_vec()); - len_y = int(0); - vals_i__ = context__.vals_i("len_y"); - pos__ = 0; - len_y = vals_i__[pos__++]; - context__.validate_dims("data initialization", "lb_y", "double", context__.to_vec()); - lb_y = double(0); - vals_r__ = context__.vals_r("lb_y"); - pos__ = 0; - lb_y = vals_r__[pos__++]; - context__.validate_dims("data initialization", "ub_y", "double", context__.to_vec()); - ub_y = double(0); - vals_r__ = context__.vals_r("ub_y"); - pos__ = 0; - ub_y = vals_r__[pos__++]; - validate_non_negative_index("y", "len_y", len_y); - context__.validate_dims("data initialization", "y", "vector_d", context__.to_vec(len_y)); - validate_non_negative_index("y", "len_y", len_y); - y = vector_d(static_cast(len_y)); - vals_r__ = context__.vals_r("y"); - pos__ = 0; - size_t y_i_vec_lim__ = len_y; - for (size_t i_vec__ = 0; i_vec__ < y_i_vec_lim__; ++i_vec__) { - y[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec()); - num_non_zero = int(0); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - num_non_zero = vals_i__[pos__++]; - validate_non_negative_index("w", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec(num_non_zero)); - validate_non_negative_index("w", "num_non_zero", num_non_zero); - w = vector_d(static_cast(num_non_zero)); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = num_non_zero; - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "v", "int", context__.to_vec(num_non_zero)); - validate_non_negative_index("v", "num_non_zero", num_non_zero); - v = std::vector(num_non_zero,int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = num_non_zero; - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_gt(t,0) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - u = std::vector((logical_gt(t,0) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_gt(t,0) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept_z", "int", context__.to_vec()); - has_intercept_z = int(0); - vals_i__ = context__.vals_i("has_intercept_z"); - pos__ = 0; - has_intercept_z = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link_phi", "int", context__.to_vec()); - link_phi = int(0); - vals_i__ = context__.vals_i("link_phi"); - pos__ = 0; - link_phi = vals_i__[pos__++]; - context__.validate_dims("data initialization", "z_dim", "int", context__.to_vec()); - z_dim = int(0); - vals_i__ = context__.vals_i("z_dim"); - pos__ = 0; - z_dim = vals_i__[pos__++]; - validate_non_negative_index("betareg_z", "N", N); - validate_non_negative_index("betareg_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "betareg_z", "matrix_d", context__.to_vec(N,z_dim)); - validate_non_negative_index("betareg_z", "N", N); - validate_non_negative_index("betareg_z", "z_dim", z_dim); - betareg_z = matrix_d(static_cast(N),static_cast(z_dim)); - vals_r__ = context__.vals_r("betareg_z"); - pos__ = 0; - size_t betareg_z_m_mat_lim__ = N; - size_t betareg_z_n_mat_lim__ = z_dim; - for (size_t n_mat__ = 0; n_mat__ < betareg_z_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < betareg_z_m_mat_lim__; ++m_mat__) { - betareg_z(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("zbar", "z_dim", z_dim); - context__.validate_dims("data initialization", "zbar", "row_vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("zbar", "z_dim", z_dim); - zbar = row_vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("zbar"); - pos__ = 0; - size_t zbar_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < zbar_i_vec_lim__; ++i_vec__) { - zbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_dist_z", "int", context__.to_vec()); - prior_dist_z = int(0); - vals_i__ = context__.vals_i("prior_dist_z"); - pos__ = 0; - prior_dist_z = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept_z", "int", context__.to_vec()); - prior_dist_for_intercept_z = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept_z"); - pos__ = 0; - prior_dist_for_intercept_z = vals_i__[pos__++]; - validate_non_negative_index("prior_scale_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "prior_scale_z", "vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("prior_scale_z", "z_dim", z_dim); - prior_scale_z = vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("prior_scale_z"); - pos__ = 0; - size_t prior_scale_z_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_z_i_vec_lim__; ++i_vec__) { - prior_scale_z[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept_z", "double", context__.to_vec()); - prior_scale_for_intercept_z = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept_z"); - pos__ = 0; - prior_scale_for_intercept_z = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "prior_mean_z", "vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("prior_mean_z", "z_dim", z_dim); - prior_mean_z = vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("prior_mean_z"); - pos__ = 0; - size_t prior_mean_z_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_z_i_vec_lim__; ++i_vec__) { - prior_mean_z[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept_z", "double", context__.to_vec()); - prior_mean_for_intercept_z = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept_z"); - pos__ = 0; - prior_mean_for_intercept_z = vals_r__[pos__++]; - validate_non_negative_index("prior_df_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "prior_df_z", "vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("prior_df_z", "z_dim", z_dim); - prior_df_z = vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("prior_df_z"); - pos__ = 0; - size_t prior_df_z_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < prior_df_z_i_vec_lim__; ++i_vec__) { - prior_df_z[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept_z", "double", context__.to_vec()); - prior_df_for_intercept_z = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept_z"); - pos__ = 0; - prior_df_for_intercept_z = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale_z", "double", context__.to_vec()); - global_prior_scale_z = double(0); - vals_r__ = context__.vals_r("global_prior_scale_z"); - pos__ = 0; - global_prior_scale_z = vals_r__[pos__++]; - validate_non_negative_index("num_normals_z", "(logical_eq(prior_dist_z,7) ? z_dim : 0 )", (logical_eq(prior_dist_z,7) ? z_dim : 0 )); - context__.validate_dims("data initialization", "num_normals_z", "int", context__.to_vec((logical_eq(prior_dist_z,7) ? z_dim : 0 ))); - validate_non_negative_index("num_normals_z", "(logical_eq(prior_dist_z,7) ? z_dim : 0 )", (logical_eq(prior_dist_z,7) ? z_dim : 0 )); - num_normals_z = std::vector((logical_eq(prior_dist_z,7) ? z_dim : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals_z"); - pos__ = 0; - size_t num_normals_z_limit_0__ = (logical_eq(prior_dist_z,7) ? z_dim : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_z_limit_0__; ++i_0__) { - num_normals_z[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "SSfun", "int", context__.to_vec()); - SSfun = int(0); - vals_i__ = context__.vals_i("SSfun"); - pos__ = 0; - SSfun = vals_i__[pos__++]; - validate_non_negative_index("input", "(logical_gt(SSfun,0) ? len_y : 0 )", (logical_gt(SSfun,0) ? len_y : 0 )); - context__.validate_dims("data initialization", "input", "vector_d", context__.to_vec((logical_gt(SSfun,0) ? len_y : 0 ))); - validate_non_negative_index("input", "(logical_gt(SSfun,0) ? len_y : 0 )", (logical_gt(SSfun,0) ? len_y : 0 )); - input = vector_d(static_cast((logical_gt(SSfun,0) ? len_y : 0 ))); - vals_r__ = context__.vals_r("input"); - pos__ = 0; - size_t input_i_vec_lim__ = (logical_gt(SSfun,0) ? len_y : 0 ); - for (size_t i_vec__ = 0; i_vec__ < input_i_vec_lim__; ++i_vec__) { - input[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("Dose", "(logical_eq(SSfun,5) ? len_y : 0 )", (logical_eq(SSfun,5) ? len_y : 0 )); - context__.validate_dims("data initialization", "Dose", "vector_d", context__.to_vec((logical_eq(SSfun,5) ? len_y : 0 ))); - validate_non_negative_index("Dose", "(logical_eq(SSfun,5) ? len_y : 0 )", (logical_eq(SSfun,5) ? len_y : 0 )); - Dose = vector_d(static_cast((logical_eq(SSfun,5) ? len_y : 0 ))); - vals_r__ = context__.vals_r("Dose"); - pos__ = 0; - size_t Dose_i_vec_lim__ = (logical_eq(SSfun,5) ? len_y : 0 ); - for (size_t i_vec__ = 0; i_vec__ < Dose_i_vec_lim__; ++i_vec__) { - Dose[i_vec__] = vals_r__[pos__++]; - } - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - check_greater_or_equal(function__,"len_y",len_y,0); - check_greater_or_equal(function__,"ub_y",ub_y,lb_y); - check_greater_or_equal(function__,"y",y,lb_y); - check_less_or_equal(function__,"y",y,ub_y); - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - check_greater_or_equal(function__,"num_non_zero",num_non_zero,0); - for (int k0__ = 0; k0__ < num_non_zero; ++k0__) { - check_greater_or_equal(function__,"v[k0__]",v[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (N + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u[k0__]",u[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - check_greater_or_equal(function__,"has_intercept_z",has_intercept_z,0); - check_less_or_equal(function__,"has_intercept_z",has_intercept_z,1); - check_greater_or_equal(function__,"link_phi",link_phi,0); - check_greater_or_equal(function__,"z_dim",z_dim,0); - check_greater_or_equal(function__,"prior_dist_z",prior_dist_z,0); - check_less_or_equal(function__,"prior_dist_z",prior_dist_z,7); - check_greater_or_equal(function__,"prior_dist_for_intercept_z",prior_dist_for_intercept_z,0); - check_less_or_equal(function__,"prior_dist_for_intercept_z",prior_dist_for_intercept_z,2); - check_greater_or_equal(function__,"prior_scale_z",prior_scale_z,0); - check_greater_or_equal(function__,"prior_scale_for_intercept_z",prior_scale_for_intercept_z,0); - check_greater_or_equal(function__,"prior_df_z",prior_df_z,0); - check_greater_or_equal(function__,"prior_df_for_intercept_z",prior_df_for_intercept_z,0); - check_greater_or_equal(function__,"global_prior_scale_z",global_prior_scale_z,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist_z,7) ? z_dim : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals_z[k0__]",num_normals_z[k0__],2); - } - check_greater_or_equal(function__,"SSfun",SSfun,0); - check_less_or_equal(function__,"SSfun",SSfun,10); - // initialize data variables - validate_non_negative_index("sqrt_y", "(logical_eq(family,3) ? len_y : 0 )", (logical_eq(family,3) ? len_y : 0 )); - sqrt_y = vector_d(static_cast((logical_eq(family,3) ? len_y : 0 ))); - stan::math::fill(sqrt_y,DUMMY_VAR__); - validate_non_negative_index("log_y", "(logical_eq(family,3) ? len_y : 0 )", (logical_eq(family,3) ? len_y : 0 )); - log_y = vector_d(static_cast((logical_eq(family,3) ? len_y : 0 ))); - stan::math::fill(log_y,DUMMY_VAR__); - sum_log_y = double(0); - stan::math::fill(sum_log_y,DUMMY_VAR__); - stan::math::assign(sum_log_y,(logical_eq(family,1) ? stan::math::not_a_number() : sum(log(y)) )); - validate_non_negative_index("V", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V", "len_y", len_y); - V = std::vector >((special_case ? t : 0 ),std::vector(len_y,int(0))); - stan::math::fill(V, std::numeric_limits::min()); - stan::math::assign(V,make_V(len_y,(special_case ? t : 0 ),v, pstream__)); - hs_z = int(0); - stan::math::fill(hs_z, std::numeric_limits::min()); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - if (as_bool(logical_lte(prior_dist,2))) { - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - stan::math::assign(hs, 4); - } else { - stan::math::assign(hs, 0); - } - stan::math::assign(pos, 1); - for (int i = 1; i <= t; ++i) { - - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - stan::math::assign(pos, (pos + 1)); - } - } - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - if (as_bool(logical_lte(prior_dist_z,2))) { - stan::math::assign(hs_z, 0); - } else if (as_bool(logical_eq(prior_dist_z,3))) { - stan::math::assign(hs_z, 2); - } else if (as_bool(logical_eq(prior_dist_z,4))) { - stan::math::assign(hs_z, 4); - } else { - stan::math::assign(hs_z, 0); - } - stan::math::assign(is_continuous, 1); - if (as_bool(logical_eq(family,3))) { - - stan::math::assign(sqrt_y, sqrt(y)); - stan::math::assign(log_y, log(y)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < len_y; ++k1__) { - check_greater_or_equal(function__,"V[k0__][k1__]",V[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"hs_z",hs_z,0); - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - ++num_params_r__; - validate_non_negative_index("z_omega", "(logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )", (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - num_params_r__ += (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); - validate_non_negative_index("gamma_z", "has_intercept_z", has_intercept_z); - num_params_r__ += has_intercept_z; - validate_non_negative_index("global_z", "hs_z", hs_z); - num_params_r__ += hs_z; - validate_non_negative_index("local_z", "z_dim", z_dim); - validate_non_negative_index("local_z", "hs_z", hs_z); - num_params_r__ += z_dim * hs_z; - validate_non_negative_index("S_z", "z_dim", z_dim); - validate_non_negative_index("S_z", "(primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))", (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))); - num_params_r__ += z_dim * (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); - validate_non_negative_index("one_over_lambda_z", "logical_eq(prior_dist_z,6)", logical_eq(prior_dist_z,6)); - num_params_r__ += logical_eq(prior_dist_z,6); - } - - ~model_continuous() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_lub_unconstrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - if (!(context__.contains_r("aux_unscaled"))) - throw std::runtime_error("variable aux_unscaled missing"); - vals_r__ = context__.vals_r("aux_unscaled"); - pos__ = 0U; - context__.validate_dims("initialization", "aux_unscaled", "double", context__.to_vec()); - // generate_declaration aux_unscaled - double aux_unscaled(0); - aux_unscaled = vals_r__[pos__++]; - try { - writer__.scalar_lb_unconstrain(0,aux_unscaled); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable aux_unscaled: ") + e.what()); - } - - if (!(context__.contains_r("z_omega"))) - throw std::runtime_error("variable z_omega missing"); - vals_r__ = context__.vals_r("z_omega"); - pos__ = 0U; - validate_non_negative_index("z_omega", "(logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )", (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - context__.validate_dims("initialization", "z_omega", "vector_d", context__.to_vec((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ))); - // generate_declaration z_omega - vector_d z_omega(static_cast((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++j1__) - z_omega(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_omega); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_omega: ") + e.what()); - } - - if (!(context__.contains_r("gamma_z"))) - throw std::runtime_error("variable gamma_z missing"); - vals_r__ = context__.vals_r("gamma_z"); - pos__ = 0U; - validate_non_negative_index("gamma_z", "has_intercept_z", has_intercept_z); - context__.validate_dims("initialization", "gamma_z", "double", context__.to_vec(has_intercept_z)); - // generate_declaration gamma_z - std::vector gamma_z(has_intercept_z,double(0)); - for (int i0__ = 0U; i0__ < has_intercept_z; ++i0__) - gamma_z[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept_z; ++i0__) - try { - writer__.scalar_lb_unconstrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ),gamma_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma_z: ") + e.what()); - } - - if (!(context__.contains_r("global_z"))) - throw std::runtime_error("variable global_z missing"); - vals_r__ = context__.vals_r("global_z"); - pos__ = 0U; - validate_non_negative_index("global_z", "hs_z", hs_z); - context__.validate_dims("initialization", "global_z", "double", context__.to_vec(hs_z)); - // generate_declaration global_z - std::vector global_z(hs_z,double(0)); - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - global_z[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global_z: ") + e.what()); - } - - if (!(context__.contains_r("local_z"))) - throw std::runtime_error("variable local_z missing"); - vals_r__ = context__.vals_r("local_z"); - pos__ = 0U; - validate_non_negative_index("local_z", "hs_z", hs_z); - validate_non_negative_index("local_z", "z_dim", z_dim); - context__.validate_dims("initialization", "local_z", "vector_d", context__.to_vec(hs_z,z_dim)); - // generate_declaration local_z - std::vector local_z(hs_z,vector_d(static_cast(z_dim))); - for (int j1__ = 0U; j1__ < z_dim; ++j1__) - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - local_z[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local_z: ") + e.what()); - } - - if (!(context__.contains_r("S_z"))) - throw std::runtime_error("variable S_z missing"); - vals_r__ = context__.vals_r("S_z"); - pos__ = 0U; - validate_non_negative_index("S_z", "(primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))", (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))); - validate_non_negative_index("S_z", "z_dim", z_dim); - context__.validate_dims("initialization", "S_z", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))),z_dim)); - // generate_declaration S_z - std::vector S_z((primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))),vector_d(static_cast(z_dim))); - for (int j1__ = 0U; j1__ < z_dim; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++i0__) - S_z[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,S_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable S_z: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda_z"))) - throw std::runtime_error("variable one_over_lambda_z missing"); - vals_r__ = context__.vals_r("one_over_lambda_z"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda_z", "logical_eq(prior_dist_z,6)", logical_eq(prior_dist_z,6)); - context__.validate_dims("initialization", "one_over_lambda_z", "double", context__.to_vec(logical_eq(prior_dist_z,6))); - // generate_declaration one_over_lambda_z - std::vector one_over_lambda_z(logical_eq(prior_dist_z,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist_z,6); ++i0__) - one_over_lambda_z[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist_z,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda_z: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),lp__)); - else - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - T__ aux_unscaled; - (void) aux_unscaled; // dummy to suppress unused var warning - if (jacobian__) - aux_unscaled = in__.scalar_lb_constrain(0,lp__); - else - aux_unscaled = in__.scalar_lb_constrain(0); - - Eigen::Matrix z_omega; - (void) z_omega; // dummy to suppress unused var warning - if (jacobian__) - z_omega = in__.vector_constrain((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ),lp__); - else - z_omega = in__.vector_constrain((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - - vector gamma_z; - size_t dim_gamma_z_0__ = has_intercept_z; - gamma_z.reserve(dim_gamma_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_z_0__; ++k_0__) { - if (jacobian__) - gamma_z.push_back(in__.scalar_lb_constrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ),lp__)); - else - gamma_z.push_back(in__.scalar_lb_constrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ))); - } - - vector global_z; - size_t dim_global_z_0__ = hs_z; - global_z.reserve(dim_global_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_z_0__; ++k_0__) { - if (jacobian__) - global_z.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global_z.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local_z; - size_t dim_local_z_0__ = hs_z; - local_z.reserve(dim_local_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_z_0__; ++k_0__) { - if (jacobian__) - local_z.push_back(in__.vector_lb_constrain(0,z_dim,lp__)); - else - local_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - - vector > S_z; - size_t dim_S_z_0__ = (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); - S_z.reserve(dim_S_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_S_z_0__; ++k_0__) { - if (jacobian__) - S_z.push_back(in__.vector_lb_constrain(0,z_dim,lp__)); - else - S_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - - vector one_over_lambda_z; - size_t dim_one_over_lambda_z_0__ = logical_eq(prior_dist_z,6); - one_over_lambda_z.reserve(dim_one_over_lambda_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_z_0__; ++k_0__) { - if (jacobian__) - one_over_lambda_z.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda_z.push_back(in__.scalar_lb_constrain(0)); - } - - - // transformed parameters - T__ aux; - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, DUMMY_VAR__); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(aux_unscaled) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * aux_unscaled) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * aux_unscaled)) )) )); - validate_non_negative_index("omega", "z_dim", z_dim); - Eigen::Matrix omega(static_cast(z_dim)); - (void) omega; // dummy to suppress unused var warning - - stan::math::initialize(omega, DUMMY_VAR__); - stan::math::fill(omega,DUMMY_VAR__); - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool(logical_eq(prior_dist_z,0))) { - stan::math::assign(omega, z_omega); - } else if (as_bool(logical_eq(prior_dist_z,1))) { - stan::math::assign(omega, add(elt_multiply(z_omega,prior_scale_z),prior_mean_z)); - } else if (as_bool(logical_eq(prior_dist_z,2))) { - for (int k = 1; k <= z_dim; ++k) { - - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((CFt(get_base1(omega,k,"omega",1),get_base1(prior_df_z,k,"prior_df_z",1), pstream__) * get_base1(prior_scale_z,k,"prior_scale_z",1)) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } else if (as_bool(logical_eq(prior_dist_z,3))) { - stan::math::assign(omega, hs_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,4))) { - stan::math::assign(omega, hsplus_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,5))) { - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(prior_scale_z,sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,6))) { - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda_z,1,"one_over_lambda_z",1),prior_scale_z),sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= z_dim; ++k) { - - stan::math::assign(get_base1_lhs(omega,k,"omega",1), get_base1(z_omega,z_pos,"z_omega",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals_z,k,"num_normals_z",1); ++n) { - - stan::math::assign(get_base1_lhs(omega,k,"omega",1), (get_base1(omega,k,"omega",1) * get_base1(z_omega,z_pos,"z_omega",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((get_base1(omega,k,"omega",1) * pow(get_base1(prior_scale_z,k,"prior_scale_z",1),get_base1(num_normals_z,k,"num_normals_z",1))) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, multiply(elt_multiply(scale,tau),aux)); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - if (stan::math::is_uninitialized(aux)) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: aux"; - throw std::runtime_error(msg__.str()); - } - for (int i0__ = 0; i0__ < z_dim; ++i0__) { - if (stan::math::is_uninitialized(omega(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: omega" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta_z", "N", N); - Eigen::Matrix eta_z(static_cast(N)); - (void) eta_z; // dummy to suppress unused var warning - - stan::math::initialize(eta_z, DUMMY_VAR__); - stan::math::fill(eta_z,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool((primitive_value((primitive_value(logical_eq(family,1)) || primitive_value(logical_eq(link,2)))) || primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_neq(link,5))))))) { - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,5))))) { - stan::math::assign(eta, add(subtract(eta,max(eta)),get_base1(gamma,1,"gamma",1))); - } else { - stan::math::assign(eta, add(subtract(eta,min(eta)),get_base1(gamma,1,"gamma",1))); - } - } else { - - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - if (as_bool(logical_gt(SSfun,0))) { - { - validate_non_negative_index("P", "len_y", len_y); - validate_non_negative_index("P", "K", K); - Eigen::Matrix P(static_cast(len_y),static_cast(K)); - (void) P; // dummy to suppress unused var warning - - stan::math::initialize(P, DUMMY_VAR__); - stan::math::fill(P,DUMMY_VAR__); - - - stan::math::assign(P, reshape_vec(eta,len_y,K, pstream__)); - if (as_bool(logical_lt(SSfun,5))) { - - if (as_bool(logical_lte(SSfun,2))) { - - if (as_bool(logical_eq(SSfun,1))) { - lp_accum__.add(normal_log(y,SS_asymp(input,P, pstream__),aux)); - } else { - lp_accum__.add(normal_log(y,SS_asympOff(input,P, pstream__),aux)); - } - } else if (as_bool(logical_eq(SSfun,3))) { - lp_accum__.add(normal_log(y,SS_asympOrig(input,P, pstream__),aux)); - } else { - - for (int i = 1; i <= len_y; ++i) { - stan::math::assign(get_base1_lhs(P,i,1,"P",1), (get_base1(P,i,1,"P",1) + exp(get_base1(P,i,3,"P",1)))); - } - lp_accum__.add(normal_log(y,SS_biexp(input,P, pstream__),aux)); - } - } else { - - if (as_bool(logical_lte(SSfun,7))) { - - if (as_bool(logical_eq(SSfun,5))) { - lp_accum__.add(normal_log(y,SS_fol(Dose,input,P, pstream__),aux)); - } else if (as_bool(logical_eq(SSfun,6))) { - lp_accum__.add(normal_log(y,SS_fpl(input,P, pstream__),aux)); - } else { - lp_accum__.add(normal_log(y,SS_gompertz(input,P, pstream__),aux)); - } - } else { - - if (as_bool(logical_eq(SSfun,8))) { - lp_accum__.add(normal_log(y,SS_logis(input,P, pstream__),aux)); - } else if (as_bool(logical_eq(SSfun,9))) { - lp_accum__.add(normal_log(y,SS_micmen(input,P, pstream__),aux)); - } else { - lp_accum__.add(normal_log(y,SS_weibull(input,P, pstream__),aux)); - } - } - } - } - } else if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - - if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(z_dim,0)))) && primitive_value(logical_gt(link_phi,0))))) { - - stan::math::assign(eta_z, multiply(betareg_z,omega)); - } else if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(z_dim,0)))) && primitive_value(logical_eq(has_intercept_z,1))))) { - - stan::math::assign(eta_z, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_intercept_z,1))) { - - if (as_bool(logical_gt(link_phi,1))) { - - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),get_base1(gamma_z,1,"gamma_z",1))); - } else { - - stan::math::assign(eta_z, add(eta_z,get_base1(gamma_z,1,"gamma_z",1))); - } - } else { - - if (as_bool(logical_gt(link_phi,1))) { - - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),dot_product(zbar,omega))); - } else { - - stan::math::assign(eta_z, add(eta_z,dot_product(zbar,omega))); - } - } - if (as_bool(logical_eq(family,1))) { - - if (as_bool(logical_eq(link,1))) { - lp_accum__.add(normal_log(y,eta,aux)); - } else if (as_bool(logical_eq(link,2))) { - lp_accum__.add(normal_log(y,exp(eta),aux)); - } else { - lp_accum__.add(normal_log(y,divide_real_by_vector(1,eta, pstream__),aux)); - } - } else if (as_bool(logical_eq(family,2))) { - - lp_accum__.add(GammaReg(y,eta,aux,link,sum_log_y, pstream__)); - } else if (as_bool(logical_eq(family,3))) { - - lp_accum__.add(inv_gaussian(y,linkinv_inv_gaussian(eta,link, pstream__),aux,sum_log_y,sqrt_y, pstream__)); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link_phi,0))))) { - { - validate_non_negative_index("mu", "N", N); - Eigen::Matrix mu(static_cast(N)); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, DUMMY_VAR__); - stan::math::fill(mu,DUMMY_VAR__); - - - stan::math::assign(mu, linkinv_beta(eta,link, pstream__)); - lp_accum__.add(beta_log(y,multiply(mu,aux),multiply(subtract(1,mu),aux))); - } - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(link_phi,0))))) { - { - validate_non_negative_index("mu", "N", N); - Eigen::Matrix mu(static_cast(N)); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, DUMMY_VAR__); - stan::math::fill(mu,DUMMY_VAR__); - validate_non_negative_index("mu_z", "N", N); - Eigen::Matrix mu_z(static_cast(N)); - (void) mu_z; // dummy to suppress unused var warning - - stan::math::initialize(mu_z, DUMMY_VAR__); - stan::math::fill(mu_z,DUMMY_VAR__); - - - stan::math::assign(mu, linkinv_beta(eta,link, pstream__)); - stan::math::assign(mu_z, linkinv_beta_z(eta_z,link_phi, pstream__)); - lp_accum__.add(beta_log(y,rows_dot_product(mu,mu_z),rows_dot_product(subtract(1,mu),mu_z))); - } - } - } else if (as_bool(logical_eq(prior_PD,0))) { - { - validate_non_negative_index("summands", "N", N); - Eigen::Matrix summands(static_cast(N)); - (void) summands; // dummy to suppress unused var warning - - stan::math::initialize(summands, DUMMY_VAR__); - stan::math::fill(summands,DUMMY_VAR__); - - - if (as_bool(logical_eq(family,1))) { - stan::math::assign(summands, pw_gauss(y,eta,aux,link, pstream__)); - } else if (as_bool(logical_eq(family,2))) { - stan::math::assign(summands, pw_gamma(y,eta,aux,link, pstream__)); - } else if (as_bool(logical_eq(family,3))) { - stan::math::assign(summands, pw_inv_gaussian(y,eta,aux,link,log_y,sqrt_y, pstream__)); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link_phi,0))))) { - stan::math::assign(summands, pw_beta(y,eta,aux,link, pstream__)); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(link_phi,0))))) { - stan::math::assign(summands, pw_beta_z(y,eta,eta_z,link,link_phi, pstream__)); - } - lp_accum__.add(dot_product(weights,summands)); - } - } - if (as_bool((primitive_value(logical_gt(prior_dist_for_aux,0)) && primitive_value(logical_gt(prior_scale_for_aux,0))))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_aux,1))) { - lp_accum__.add((normal_log(aux_unscaled,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_aux,2))) { - lp_accum__.add((student_t_log(aux_unscaled,prior_df_for_aux,0,1) - log_half)); - } else { - lp_accum__.add(exponential_log(aux_unscaled,1)); - } - } - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - if (as_bool(K_smooth)) { - - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - if (as_bool(logical_eq(prior_dist_z,1))) { - lp_accum__.add(normal_log(z_omega,0,1)); - } else if (as_bool(logical_eq(prior_dist_z,2))) { - lp_accum__.add(normal_log(z_omega,0,1)); - } else if (as_bool(logical_eq(prior_dist_z,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_omega,0,1)); - lp_accum__.add((normal_log(get_base1(local_z,1,"local_z",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local_z,2,"local_z",1),multiply(0.5,prior_df_z),multiply(0.5,prior_df_z))); - lp_accum__.add((normal_log(get_base1(global_z,1,"global_z",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global_z,2,"global_z",1),0.5,0.5)); - } - } else if (as_bool(logical_eq(prior_dist_z,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_omega,0,1)); - lp_accum__.add((normal_log(get_base1(local_z,1,"local_z",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local_z,2,"local_z",1),multiply(0.5,prior_df_z),multiply(0.5,prior_df_z))); - lp_accum__.add((normal_log(get_base1(local_z,3,"local_z",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local_z,4,"local_z",1),multiply(0.5,prior_scale_z),multiply(0.5,prior_scale_z))); - lp_accum__.add((normal_log(get_base1(global_z,1,"global_z",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global_z,2,"global_z",1),0.5,0.5)); - } - } else if (as_bool(logical_eq(prior_dist_z,5))) { - - lp_accum__.add(normal_log(z_omega,0,1)); - lp_accum__.add(exponential_log(get_base1(S_z,1,"S_z",1),1)); - } else if (as_bool(logical_eq(prior_dist_z,6))) { - - lp_accum__.add(normal_log(z_omega,0,1)); - lp_accum__.add(exponential_log(get_base1(S_z,1,"S_z",1),1)); - lp_accum__.add(chi_square_log(get_base1(one_over_lambda_z,1,"one_over_lambda_z",1),get_base1(prior_df_z,1,"prior_df_z",1))); - } else if (as_bool(logical_eq(prior_dist_z,7))) { - - lp_accum__.add(normal_log(z_omega,0,1)); - } - if (as_bool(logical_eq(has_intercept_z,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept_z,1))) { - lp_accum__.add(normal_log(gamma_z,prior_mean_for_intercept_z,prior_scale_for_intercept_z)); - } else if (as_bool(logical_eq(prior_dist_for_intercept_z,2))) { - lp_accum__.add(student_t_log(gamma_z,prior_df_for_intercept_z,prior_mean_for_intercept_z,prior_scale_for_intercept_z)); - } - } - if (as_bool(logical_gt(t,0))) { - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("aux_unscaled"); - names__.push_back("z_omega"); - names__.push_back("gamma_z"); - names__.push_back("global_z"); - names__.push_back("local_z"); - names__.push_back("S_z"); - names__.push_back("one_over_lambda_z"); - names__.push_back("aux"); - names__.push_back("omega"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("omega_int"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept_z); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs_z); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs_z); - dims__.push_back(z_dim); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))); - dims__.push_back(z_dim); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist_z,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(z_dim); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept_z); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_continuous_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - double aux_unscaled = in__.scalar_lb_constrain(0); - vector_d z_omega = in__.vector_constrain((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - vector gamma_z; - size_t dim_gamma_z_0__ = has_intercept_z; - for (size_t k_0__ = 0; k_0__ < dim_gamma_z_0__; ++k_0__) { - gamma_z.push_back(in__.scalar_lb_constrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ))); - } - vector global_z; - size_t dim_global_z_0__ = hs_z; - for (size_t k_0__ = 0; k_0__ < dim_global_z_0__; ++k_0__) { - global_z.push_back(in__.scalar_lb_constrain(0)); - } - vector local_z; - size_t dim_local_z_0__ = hs_z; - for (size_t k_0__ = 0; k_0__ < dim_local_z_0__; ++k_0__) { - local_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - vector S_z; - size_t dim_S_z_0__ = (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); - for (size_t k_0__ = 0; k_0__ < dim_S_z_0__; ++k_0__) { - S_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - vector one_over_lambda_z; - size_t dim_one_over_lambda_z_0__ = logical_eq(prior_dist_z,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_z_0__; ++k_0__) { - one_over_lambda_z.push_back(in__.scalar_lb_constrain(0)); - } - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - vars__.push_back(aux_unscaled); - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++k_0__) { - vars__.push_back(z_omega[k_0__]); - } - for (int k_0__ = 0; k_0__ < has_intercept_z; ++k_0__) { - vars__.push_back(gamma_z[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs_z; ++k_0__) { - vars__.push_back(global_z[k_0__]); - } - for (int k_1__ = 0; k_1__ < z_dim; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs_z; ++k_0__) { - vars__.push_back(local_z[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < z_dim; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++k_0__) { - vars__.push_back(S_z[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist_z,6); ++k_0__) { - vars__.push_back(one_over_lambda_z[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - double aux(0.0); - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(aux_unscaled) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * aux_unscaled) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * aux_unscaled)) )) )); - validate_non_negative_index("omega", "z_dim", z_dim); - vector_d omega(static_cast(z_dim)); - (void) omega; // dummy to suppress unused var warning - - stan::math::initialize(omega, std::numeric_limits::quiet_NaN()); - stan::math::fill(omega,DUMMY_VAR__); - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool(logical_eq(prior_dist_z,0))) { - stan::math::assign(omega, z_omega); - } else if (as_bool(logical_eq(prior_dist_z,1))) { - stan::math::assign(omega, add(elt_multiply(z_omega,prior_scale_z),prior_mean_z)); - } else if (as_bool(logical_eq(prior_dist_z,2))) { - for (int k = 1; k <= z_dim; ++k) { - - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((CFt(get_base1(omega,k,"omega",1),get_base1(prior_df_z,k,"prior_df_z",1), pstream__) * get_base1(prior_scale_z,k,"prior_scale_z",1)) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } else if (as_bool(logical_eq(prior_dist_z,3))) { - stan::math::assign(omega, hs_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,4))) { - stan::math::assign(omega, hsplus_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,5))) { - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(prior_scale_z,sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,6))) { - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda_z,1,"one_over_lambda_z",1),prior_scale_z),sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= z_dim; ++k) { - - stan::math::assign(get_base1_lhs(omega,k,"omega",1), get_base1(z_omega,z_pos,"z_omega",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals_z,k,"num_normals_z",1); ++n) { - - stan::math::assign(get_base1_lhs(omega,k,"omega",1), (get_base1(omega,k,"omega",1) * get_base1(z_omega,z_pos,"z_omega",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((get_base1(omega,k,"omega",1) * pow(get_base1(prior_scale_z,k,"prior_scale_z",1),get_base1(num_normals_z,k,"num_normals_z",1))) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, multiply(elt_multiply(scale,tau),aux)); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - vars__.push_back(aux); - for (int k_0__ = 0; k_0__ < z_dim; ++k_0__) { - vars__.push_back(omega[k_0__]); - } - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - validate_non_negative_index("omega_int", "has_intercept_z", has_intercept_z); - vector omega_int(has_intercept_z, 0.0); - stan::math::initialize(omega_int, std::numeric_limits::quiet_NaN()); - stan::math::fill(omega_int,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(dense_X)) { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - if (as_bool(logical_eq(has_intercept_z,1))) { - - stan::math::assign(get_base1_lhs(omega_int,1,"omega_int",1), (get_base1(gamma_z,1,"gamma_z",1) - dot_product(zbar,omega))); - } - { - validate_non_negative_index("eta_z", "N", N); - vector_d eta_z(static_cast(N)); - (void) eta_z; // dummy to suppress unused var warning - - stan::math::initialize(eta_z, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_z,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool((primitive_value(logical_eq(make_lower(family,link, pstream__),stan::math::negative_infinity())) && primitive_value(logical_eq(make_upper(family,link, pstream__),stan::math::positive_infinity()))))) { - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,5))))) { - { - double max_eta(0.0); - (void) max_eta; // dummy to suppress unused var warning - - stan::math::initialize(max_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(max_eta,DUMMY_VAR__); - - - stan::math::assign(max_eta, max(eta)); - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - max_eta)); - stan::math::assign(eta, add(subtract(eta,max_eta),get_base1(gamma,1,"gamma",1))); - } - } else { - { - double min_eta(0.0); - (void) min_eta; // dummy to suppress unused var warning - - stan::math::initialize(min_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(min_eta,DUMMY_VAR__); - stan::math::assign(min_eta,min(eta)); - - - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - min_eta)); - stan::math::assign(eta, add(subtract(eta,min_eta),get_base1(gamma,1,"gamma",1))); - } - } - } else { - - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(z_dim,0)))) && primitive_value(logical_gt(link_phi,0))))) { - - stan::math::assign(eta_z, multiply(betareg_z,omega)); - } else if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(z_dim,0)))) && primitive_value(logical_eq(has_intercept_z,1))))) { - - stan::math::assign(eta_z, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_intercept_z,1))) { - - if (as_bool(logical_gt(link_phi,1))) { - - stan::math::assign(get_base1_lhs(omega_int,1,"omega_int",1), (get_base1(omega_int,1,"omega_int",1) - min(eta_z))); - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),get_base1(gamma_z,1,"gamma_z",1))); - } else { - - stan::math::assign(eta_z, add(eta_z,get_base1(gamma_z,1,"gamma_z",1))); - } - } else { - - if (as_bool(logical_gt(link_phi,1))) { - - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),dot_product(zbar,omega))); - } else { - - stan::math::assign(eta_z, add(eta_z,dot_product(zbar,omega))); - } - } - if (as_bool(logical_gt(SSfun,0))) { - { - validate_non_negative_index("eta_nlmer", "len_y", len_y); - vector_d eta_nlmer(static_cast(len_y)); - (void) eta_nlmer; // dummy to suppress unused var warning - - stan::math::initialize(eta_nlmer, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_nlmer,DUMMY_VAR__); - validate_non_negative_index("P", "len_y", len_y); - validate_non_negative_index("P", "K", K); - matrix_d P(static_cast(len_y),static_cast(K)); - (void) P; // dummy to suppress unused var warning - - stan::math::initialize(P, std::numeric_limits::quiet_NaN()); - stan::math::fill(P,DUMMY_VAR__); - - - stan::math::assign(P, reshape_vec(eta,len_y,K, pstream__)); - if (as_bool(logical_lt(SSfun,5))) { - - if (as_bool(logical_lte(SSfun,2))) { - - if (as_bool(logical_eq(SSfun,1))) { - stan::math::assign(eta_nlmer, SS_asymp(input,P, pstream__)); - } else { - stan::math::assign(eta_nlmer, SS_asympOff(input,P, pstream__)); - } - } else if (as_bool(logical_eq(SSfun,3))) { - stan::math::assign(eta_nlmer, SS_asympOrig(input,P, pstream__)); - } else { - stan::math::assign(eta_nlmer, SS_biexp(input,P, pstream__)); - } - } else { - - if (as_bool(logical_lte(SSfun,7))) { - - if (as_bool(logical_eq(SSfun,5))) { - stan::math::assign(eta_nlmer, SS_fol(Dose,input,P, pstream__)); - } else if (as_bool(logical_eq(SSfun,6))) { - stan::math::assign(eta_nlmer, SS_fpl(input,P, pstream__)); - } else { - stan::math::assign(eta_nlmer, SS_gompertz(input,P, pstream__)); - } - } else { - - if (as_bool(logical_eq(SSfun,8))) { - stan::math::assign(eta_nlmer, SS_logis(input,P, pstream__)); - } else if (as_bool(logical_eq(SSfun,9))) { - stan::math::assign(eta_nlmer, SS_micmen(input,P, pstream__)); - } else { - stan::math::assign(eta_nlmer, SS_weibull(input,P, pstream__)); - } - } - } - for (int n = 1; n <= len_y; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta_nlmer,n,"eta_nlmer",1),aux, base_rng__))); - } - } - } else if (as_bool(logical_eq(family,1))) { - - if (as_bool(logical_gt(link,1))) { - stan::math::assign(eta, linkinv_gauss(eta,link, pstream__)); - } - for (int n = 1; n <= len_y; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta,n,"eta",1),aux, base_rng__))); - } - } else if (as_bool(logical_eq(family,2))) { - - if (as_bool(logical_gt(link,1))) { - stan::math::assign(eta, linkinv_gamma(eta,link, pstream__)); - } - for (int n = 1; n <= len_y; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + gamma_rng(aux,(aux / get_base1(eta,n,"eta",1)), base_rng__))); - } - } else if (as_bool(logical_eq(family,3))) { - - if (as_bool(logical_gt(link,1))) { - stan::math::assign(eta, linkinv_inv_gaussian(eta,link, pstream__)); - } - for (int n = 1; n <= len_y; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + inv_gaussian_rng(get_base1(eta,n,"eta",1),aux, base_rng__, pstream__))); - } - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link_phi,0))))) { - - stan::math::assign(eta, linkinv_beta(eta,link, pstream__)); - for (int n = 1; n <= N; ++n) { - { - double eta_n(0.0); - (void) eta_n; // dummy to suppress unused var warning - - stan::math::initialize(eta_n, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_n,DUMMY_VAR__); - stan::math::assign(eta_n,get_base1(eta,n,"eta",1)); - - - if (as_bool(logical_lte(aux,0))) { - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(0.5, base_rng__))); - } else if (as_bool(logical_gte(eta_n,1))) { - stan::math::assign(mean_PPD, (mean_PPD + 1)); - } else if (as_bool(logical_gt(eta_n,0))) { - stan::math::assign(mean_PPD, (mean_PPD + beta_rng((get_base1(eta,n,"eta",1) * aux),((1 - get_base1(eta,n,"eta",1)) * aux), base_rng__))); - } - } - } - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(link_phi,0))))) { - - stan::math::assign(eta, linkinv_beta(eta,link, pstream__)); - stan::math::assign(eta_z, linkinv_beta_z(eta_z,link_phi, pstream__)); - for (int n = 1; n <= N; ++n) { - { - double eta_n(0.0); - (void) eta_n; // dummy to suppress unused var warning - - stan::math::initialize(eta_n, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_n,DUMMY_VAR__); - stan::math::assign(eta_n,get_base1(eta,n,"eta",1)); - double aux_n(0.0); - (void) aux_n; // dummy to suppress unused var warning - - stan::math::initialize(aux_n, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux_n,DUMMY_VAR__); - stan::math::assign(aux_n,get_base1(eta_z,n,"eta_z",1)); - - - if (as_bool(logical_lte(aux_n,0))) { - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(0.5, base_rng__))); - } else if (as_bool(logical_gte(eta_n,1))) { - stan::math::assign(mean_PPD, (mean_PPD + 1)); - } else if (as_bool(logical_gt(eta_n,0))) { - stan::math::assign(mean_PPD, (mean_PPD + beta_rng((eta_n * aux_n),((1 - eta_n) * aux_n), base_rng__))); - } - } - } - } - stan::math::assign(mean_PPD, (mean_PPD / len_y)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - for (int k_0__ = 0; k_0__ < has_intercept_z; ++k_0__) { - vars__.push_back(omega_int[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_continuous"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "S_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist_z,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= z_dim; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega_int" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "S_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist_z,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= z_dim; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega_int" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_count_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_count"); - reader.add_event(735, 735, "end", "model_count"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - stan::math::assign(pi, divide(pi,sum(pi))); - stan::math::assign(zeta_mark, (zeta_mark + nc)); - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - stan::math::assign(rho_mark, (rho_mark + 1)); - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - stan::math::assign(z_T_mark, (z_T_mark + r)); - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - for (int c = 1; c <= r; ++c) { - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - for (int c = 1; c <= nc; ++c) { - for (int r = c; r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - for (int c = 1; c <= nc; ++c) { - - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - for (int r = (c + 1); r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - stan::math::assign(b_mark, (b_mark - 1)); - for (int s = 1; s <= nc; ++s) { - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - lp_accum__.add(normal_log(z_b,0,1)); - lp_accum__.add(normal_log(z_T,0,1)); - for (int i = 1; i <= t; ++i) { - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - stan::math::assign(pos_reg, (pos_reg + 1)); - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - stan::math::assign(nu, (nu - 0.5)); - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - lp_accum__.add(gamma_log(zeta,delta,1)); - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - stan::math::assign(K, rows(z_beta)); - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - if (as_bool(logical_gt(t,0))) { - for (int j = 1; j <= N; ++j) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - stan::math::assign(pos, (pos + 1)); - } - } - } - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_count(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(square(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_count_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_count(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_pois(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,1))) { - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log_log(get_base1(y,n,"y",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,3))) { - { - validate_non_negative_index("phi", "N", N); - Eigen::Matrix phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, std::numeric_limits::quiet_NaN()); - stan::math::fill(phi,DUMMY_VAR__); - stan::math::assign(phi,linkinv_count(eta,link, pstream__)); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log(get_base1(y,n,"y",1),get_base1(phi,n,"phi",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_pois_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_pois(y, eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_nb(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("rho", "N", N); - Eigen::Matrix rho(static_cast(N)); - (void) rho; // dummy to suppress unused var warning - - stan::math::initialize(rho, std::numeric_limits::quiet_NaN()); - stan::math::fill(rho,DUMMY_VAR__); - stan::math::assign(rho,linkinv_count(eta,link, pstream__)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), neg_binomial_2_log(get_base1(y,n,"y",1),get_base1(rho,n,"rho",1),theta)); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_nb_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) const { - return pw_nb(y, eta, theta, link, pstream__); - } -}; - -class model_count : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - vector y; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - int num_non_zero; - vector_d w; - vector v; - vector u; - int special_case; - double poisson_max; - vector > V; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_count(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_count(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_count_namespace::model_count"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y", "N", N); - context__.validate_dims("data initialization", "y", "int", context__.to_vec(N)); - validate_non_negative_index("y", "N", N); - y = std::vector(N,int(0)); - vals_i__ = context__.vals_i("y"); - pos__ = 0; - size_t y_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < y_limit_0__; ++i_0__) { - y[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec()); - num_non_zero = int(0); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - num_non_zero = vals_i__[pos__++]; - validate_non_negative_index("w", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec(num_non_zero)); - validate_non_negative_index("w", "num_non_zero", num_non_zero); - w = vector_d(static_cast(num_non_zero)); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = num_non_zero; - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "v", "int", context__.to_vec(num_non_zero)); - validate_non_negative_index("v", "num_non_zero", num_non_zero); - v = std::vector(num_non_zero,int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = num_non_zero; - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_gt(t,0) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - u = std::vector((logical_gt(t,0) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_gt(t,0) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"y[k0__]",y[k0__],0); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - check_greater_or_equal(function__,"num_non_zero",num_non_zero,0); - for (int k0__ = 0; k0__ < num_non_zero; ++k0__) { - check_greater_or_equal(function__,"v[k0__]",v[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (N + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u[k0__]",u[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - // initialize data variables - poisson_max = double(0); - stan::math::fill(poisson_max,DUMMY_VAR__); - stan::math::assign(poisson_max,pow(2.0,30.0)); - validate_non_negative_index("V", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V", "N", N); - V = std::vector >((special_case ? t : 0 ),std::vector(N,int(0))); - stan::math::fill(V, std::numeric_limits::min()); - stan::math::assign(V,make_V(N,(special_case ? t : 0 ),v, pstream__)); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - if (as_bool(logical_lte(prior_dist,2))) { - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - stan::math::assign(hs, 4); - } else { - stan::math::assign(hs, 0); - } - stan::math::assign(pos, 1); - for (int i = 1; i <= t; ++i) { - - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - stan::math::assign(pos, (pos + 1)); - } - } - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < N; ++k1__) { - check_greater_or_equal(function__,"V[k0__][k1__]",V[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - validate_non_negative_index("aux_unscaled", "logical_gt(family,1)", logical_gt(family,1)); - num_params_r__ += logical_gt(family,1); - validate_non_negative_index("noise", "N", N); - validate_non_negative_index("noise", "logical_eq(family,3)", logical_eq(family,3)); - num_params_r__ += N * logical_eq(family,3); - } - - ~model_count() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_lb_unconstrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - if (!(context__.contains_r("aux_unscaled"))) - throw std::runtime_error("variable aux_unscaled missing"); - vals_r__ = context__.vals_r("aux_unscaled"); - pos__ = 0U; - validate_non_negative_index("aux_unscaled", "logical_gt(family,1)", logical_gt(family,1)); - context__.validate_dims("initialization", "aux_unscaled", "double", context__.to_vec(logical_gt(family,1))); - // generate_declaration aux_unscaled - std::vector aux_unscaled(logical_gt(family,1),double(0)); - for (int i0__ = 0U; i0__ < logical_gt(family,1); ++i0__) - aux_unscaled[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_gt(family,1); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,aux_unscaled[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable aux_unscaled: ") + e.what()); - } - - if (!(context__.contains_r("noise"))) - throw std::runtime_error("variable noise missing"); - vals_r__ = context__.vals_r("noise"); - pos__ = 0U; - validate_non_negative_index("noise", "logical_eq(family,3)", logical_eq(family,3)); - validate_non_negative_index("noise", "N", N); - context__.validate_dims("initialization", "noise", "vector_d", context__.to_vec(logical_eq(family,3),N)); - // generate_declaration noise - std::vector noise(logical_eq(family,3),vector_d(static_cast(N))); - for (int j1__ = 0U; j1__ < N; ++j1__) - for (int i0__ = 0U; i0__ < logical_eq(family,3); ++i0__) - noise[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(family,3); ++i0__) - try { - writer__.vector_lb_unconstrain(0,noise[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable noise: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_lb_constrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ),lp__)); - else - gamma.push_back(in__.scalar_lb_constrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = logical_gt(family,1); - aux_unscaled.reserve(dim_aux_unscaled_0__); - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - if (jacobian__) - aux_unscaled.push_back(in__.scalar_lb_constrain(0,lp__)); - else - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - - vector > noise; - size_t dim_noise_0__ = logical_eq(family,3); - noise.reserve(dim_noise_0__); - for (size_t k_0__ = 0; k_0__ < dim_noise_0__; ++k_0__) { - if (jacobian__) - noise.push_back(in__.vector_lb_constrain(0,N,lp__)); - else - noise.push_back(in__.vector_lb_constrain(0,N)); - } - - - // transformed parameters - T__ aux; - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, DUMMY_VAR__); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::negative_infinity()); - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool((primitive_value(logical_gt(family,1)) && primitive_value((primitive_value(logical_eq(prior_dist_for_aux,0)) || primitive_value(logical_lte(prior_scale_for_aux,0))))))) { - stan::math::assign(aux, get_base1(aux_unscaled,1,"aux_unscaled",1)); - } else if (as_bool(logical_gt(family,1))) { - - stan::math::assign(aux, (prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))); - if (as_bool(logical_lte(prior_dist_for_aux,2))) { - stan::math::assign(aux, (aux + prior_mean_for_aux)); - } - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, elt_multiply(scale,(logical_eq(family,1) ? stan::math::promote_scalar(tau) : stan::math::promote_scalar(multiply(tau,aux)) ))); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - if (as_bool(logical_eq(family,1))) { - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - } else { - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - } - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - if (stan::math::is_uninitialized(aux)) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: aux"; - throw std::runtime_error(msg__.str()); - } - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(link,1))) { - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - stan::math::assign(eta, add(subtract(eta,min(eta)),get_base1(gamma,1,"gamma",1))); - } - } else { - - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - if (as_bool(logical_eq(family,3))) { - - if (as_bool(logical_eq(link,1))) { - stan::math::assign(eta, add(add(eta,log(aux)),log(get_base1(noise,1,"noise",1)))); - } else if (as_bool(logical_eq(link,2))) { - stan::math::assign(eta, elt_multiply(multiply(eta,aux),get_base1(noise,1,"noise",1))); - } else { - stan::math::assign(eta, add(add(eta,sqrt(aux)),sqrt(get_base1(noise,1,"noise",1)))); - } - } - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - - if (as_bool(logical_neq(family,2))) { - - if (as_bool(logical_eq(link,1))) { - lp_accum__.add(poisson_log_log(y,eta)); - } else { - lp_accum__.add(poisson_log(y,linkinv_count(eta,link, pstream__))); - } - } else { - - if (as_bool(logical_eq(link,1))) { - lp_accum__.add(neg_binomial_2_log_log(y,eta,aux)); - } else { - lp_accum__.add(neg_binomial_2_log(y,linkinv_count(eta,link, pstream__),aux)); - } - } - } else if (as_bool((primitive_value(logical_neq(family,2)) && primitive_value(logical_eq(prior_PD,0))))) { - lp_accum__.add(dot_product(weights,pw_pois(y,eta,link, pstream__))); - } else if (as_bool(logical_eq(prior_PD,0))) { - lp_accum__.add(dot_product(weights,pw_nb(y,eta,aux,link, pstream__))); - } - if (as_bool((primitive_value((primitive_value(logical_gt(family,1)) && primitive_value(logical_gt(prior_dist_for_aux,0)))) && primitive_value(logical_gt(prior_scale_for_aux,0))))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_aux,1))) { - lp_accum__.add((normal_log(aux_unscaled,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_aux,2))) { - lp_accum__.add((student_t_log(aux_unscaled,prior_df_for_aux,0,1) - log_half)); - } else { - lp_accum__.add(exponential_log(aux_unscaled,1)); - } - } - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - if (as_bool(K_smooth)) { - - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - if (as_bool(logical_eq(family,3))) { - lp_accum__.add(gamma_log(get_base1(noise,1,"noise",1),aux,1)); - } - if (as_bool(logical_gt(t,0))) { - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("aux_unscaled"); - names__.push_back("noise"); - names__.push_back("aux"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_gt(family,1)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(family,3)); - dims__.push_back(N); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_count_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_lb_constrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = logical_gt(family,1); - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - vector noise; - size_t dim_noise_0__ = logical_eq(family,3); - for (size_t k_0__ = 0; k_0__ < dim_noise_0__; ++k_0__) { - noise.push_back(in__.vector_lb_constrain(0,N)); - } - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - for (int k_0__ = 0; k_0__ < logical_gt(family,1); ++k_0__) { - vars__.push_back(aux_unscaled[k_0__]); - } - for (int k_1__ = 0; k_1__ < N; ++k_1__) { - for (int k_0__ = 0; k_0__ < logical_eq(family,3); ++k_0__) { - vars__.push_back(noise[k_0__][k_1__]); - } - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - double aux(0.0); - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::negative_infinity()); - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - if (as_bool(K_smooth)) { - - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - if (as_bool((primitive_value(logical_gt(family,1)) && primitive_value((primitive_value(logical_eq(prior_dist_for_aux,0)) || primitive_value(logical_lte(prior_scale_for_aux,0))))))) { - stan::math::assign(aux, get_base1(aux_unscaled,1,"aux_unscaled",1)); - } else if (as_bool(logical_gt(family,1))) { - - stan::math::assign(aux, (prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))); - if (as_bool(logical_lte(prior_dist_for_aux,2))) { - stan::math::assign(aux, (aux + prior_mean_for_aux)); - } - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - stan::math::assign(theta_L, elt_multiply(scale,(logical_eq(family,1) ? stan::math::promote_scalar(tau) : stan::math::promote_scalar(multiply(tau,aux)) ))); - if (as_bool(logical_eq(t,1))) { - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - if (as_bool(logical_eq(family,1))) { - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - } else { - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - } - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - vars__.push_back(aux); - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(dense_X)) { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - { - validate_non_negative_index("nu", "N", N); - vector_d nu(static_cast(N)); - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool(logical_gt(t,0))) { - - if (as_bool(special_case)) { - for (int i = 1; i <= t; ++i) { - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(link,1))) { - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - stan::math::assign(shift, min(eta)); - stan::math::assign(eta, add(subtract(eta,shift),get_base1(gamma,1,"gamma",1))); - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - shift)); - } - } - } else { - - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - if (as_bool(logical_eq(family,3))) { - - if (as_bool(logical_eq(link,1))) { - stan::math::assign(eta, add(add(eta,log(aux)),log(get_base1(noise,1,"noise",1)))); - } else if (as_bool(logical_eq(link,2))) { - stan::math::assign(eta, elt_multiply(multiply(eta,aux),get_base1(noise,1,"noise",1))); - } else { - stan::math::assign(eta, add(add(eta,sqrt(aux)),sqrt(get_base1(noise,1,"noise",1)))); - } - } - stan::math::assign(nu, linkinv_count(eta,link, pstream__)); - if (as_bool(logical_neq(family,2))) { - for (int n = 1; n <= N; ++n) { - - if (as_bool(logical_lt(get_base1(nu,n,"nu",1),poisson_max))) { - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(get_base1(nu,n,"nu",1), base_rng__))); - } else { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(nu,n,"nu",1),sqrt(get_base1(nu,n,"nu",1)), base_rng__))); - } - } - } else { - for (int n = 1; n <= N; ++n) { - { - double gamma_temp(0.0); - (void) gamma_temp; // dummy to suppress unused var warning - - stan::math::initialize(gamma_temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(gamma_temp,DUMMY_VAR__); - - - if (as_bool(is_inf(aux))) { - stan::math::assign(gamma_temp, get_base1(nu,n,"nu",1)); - } else { - stan::math::assign(gamma_temp, gamma_rng(aux,(aux / get_base1(nu,n,"nu",1)), base_rng__)); - } - if (as_bool(logical_lt(gamma_temp,poisson_max))) { - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(gamma_temp, base_rng__))); - } else { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(gamma_temp,sqrt(gamma_temp), base_rng__))); - } - } - } - } - stan::math::assign(mean_PPD, (mean_PPD / N)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_count"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_gt(family,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= N; ++k_1__) { - for (int k_0__ = 1; k_0__ <= logical_eq(family,3); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "noise" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_gt(family,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= N; ++k_1__) { - for (int k_0__ = 1; k_0__ <= logical_eq(family,3); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "noise" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_lm_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_lm"); - reader.add_event(133, 133, "end", "model_lm"); - return reader; -} - -template -typename boost::math::tools::promote_args::type>::type -ll_mvn_ols_qr_lp(const Eigen::Matrix& theta, - const Eigen::Matrix& b, - const T2__& intercept, - const T3__& ybar, - const T4__& SSR, - const T5__& sigma, - const int& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - lp_accum__.add((((-(0.5) * ((dot_self(subtract(theta,b)) + (N * square((intercept - ybar)))) + SSR)) / square(sigma)) - (N * (log(sigma) + 0.91893853320467267)))); - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_mvn_ols_qr_lp_functor__ { - template - typename boost::math::tools::promote_args::type>::type - operator()(const Eigen::Matrix& theta, - const Eigen::Matrix& b, - const T2__& intercept, - const T3__& ybar, - const T4__& SSR, - const T5__& sigma, - const int& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_mvn_ols_qr_lp(theta, b, intercept, ybar, SSR, sigma, N, lp__, lp_accum__, pstream__); - } -}; - -class model_lm : public prob_grad { -private: - int has_intercept; - int prior_dist_for_intercept; - double prior_scale_for_intercept; - double prior_mean_for_intercept; - int prior_dist; - int prior_PD; - double eta; - int J; - vector N; - int K; - vector xbarR_inv; - vector ybar; - double center_y; - vector s_Y; - vector Rb; - vector SSR; - vector R_inv; - double half_K; - vector sqrt_inv_N; - vector sqrt_Nm1; -public: - model_lm(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_lm(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_lm_namespace::model_lm"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "eta", "double", context__.to_vec()); - eta = double(0); - vals_r__ = context__.vals_r("eta"); - pos__ = 0; - eta = vals_r__[pos__++]; - context__.validate_dims("data initialization", "J", "int", context__.to_vec()); - J = int(0); - vals_i__ = context__.vals_i("J"); - pos__ = 0; - J = vals_i__[pos__++]; - validate_non_negative_index("N", "J", J); - context__.validate_dims("data initialization", "N", "int", context__.to_vec(J)); - validate_non_negative_index("N", "J", J); - N = std::vector(J,int(0)); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - size_t N_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < N_limit_0__; ++i_0__) { - N[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbarR_inv", "J", J); - validate_non_negative_index("xbarR_inv", "K", K); - context__.validate_dims("data initialization", "xbarR_inv", "vector_d", context__.to_vec(J,K)); - validate_non_negative_index("xbarR_inv", "J", J); - validate_non_negative_index("xbarR_inv", "K", K); - xbarR_inv = std::vector(J,vector_d(static_cast(K))); - vals_r__ = context__.vals_r("xbarR_inv"); - pos__ = 0; - size_t xbarR_inv_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbarR_inv_i_vec_lim__; ++i_vec__) { - size_t xbarR_inv_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < xbarR_inv_limit_0__; ++i_0__) { - xbarR_inv[i_0__][i_vec__] = vals_r__[pos__++]; - } - } - validate_non_negative_index("ybar", "J", J); - context__.validate_dims("data initialization", "ybar", "double", context__.to_vec(J)); - validate_non_negative_index("ybar", "J", J); - ybar = std::vector(J,double(0)); - vals_r__ = context__.vals_r("ybar"); - pos__ = 0; - size_t ybar_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < ybar_limit_0__; ++i_0__) { - ybar[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "center_y", "double", context__.to_vec()); - center_y = double(0); - vals_r__ = context__.vals_r("center_y"); - pos__ = 0; - center_y = vals_r__[pos__++]; - validate_non_negative_index("s_Y", "J", J); - context__.validate_dims("data initialization", "s_Y", "double", context__.to_vec(J)); - validate_non_negative_index("s_Y", "J", J); - s_Y = std::vector(J,double(0)); - vals_r__ = context__.vals_r("s_Y"); - pos__ = 0; - size_t s_Y_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < s_Y_limit_0__; ++i_0__) { - s_Y[i_0__] = vals_r__[pos__++]; - } - validate_non_negative_index("Rb", "J", J); - validate_non_negative_index("Rb", "K", K); - context__.validate_dims("data initialization", "Rb", "vector_d", context__.to_vec(J,K)); - validate_non_negative_index("Rb", "J", J); - validate_non_negative_index("Rb", "K", K); - Rb = std::vector(J,vector_d(static_cast(K))); - vals_r__ = context__.vals_r("Rb"); - pos__ = 0; - size_t Rb_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < Rb_i_vec_lim__; ++i_vec__) { - size_t Rb_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < Rb_limit_0__; ++i_0__) { - Rb[i_0__][i_vec__] = vals_r__[pos__++]; - } - } - validate_non_negative_index("SSR", "J", J); - context__.validate_dims("data initialization", "SSR", "double", context__.to_vec(J)); - validate_non_negative_index("SSR", "J", J); - SSR = std::vector(J,double(0)); - vals_r__ = context__.vals_r("SSR"); - pos__ = 0; - size_t SSR_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < SSR_limit_0__; ++i_0__) { - SSR[i_0__] = vals_r__[pos__++]; - } - validate_non_negative_index("R_inv", "J", J); - validate_non_negative_index("R_inv", "K", K); - validate_non_negative_index("R_inv", "K", K); - context__.validate_dims("data initialization", "R_inv", "matrix_d", context__.to_vec(J,K,K)); - validate_non_negative_index("R_inv", "J", J); - validate_non_negative_index("R_inv", "K", K); - validate_non_negative_index("R_inv", "K", K); - R_inv = std::vector(J,matrix_d(static_cast(K),static_cast(K))); - vals_r__ = context__.vals_r("R_inv"); - pos__ = 0; - size_t R_inv_m_mat_lim__ = K; - size_t R_inv_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < R_inv_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < R_inv_m_mat_lim__; ++m_mat__) { - size_t R_inv_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < R_inv_limit_0__; ++i_0__) { - R_inv[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - - // validate, data variables - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,1); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,1); - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"eta",eta,0); - check_greater_or_equal(function__,"J",J,1); - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"N[k0__]",N[k0__],1); - } - check_greater_or_equal(function__,"K",K,1); - check_less_or_equal(function__,"K",K,min(N)); - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"s_Y[k0__]",s_Y[k0__],0); - } - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"SSR[k0__]",SSR[k0__],0); - } - // initialize data variables - half_K = double(0); - stan::math::fill(half_K,DUMMY_VAR__); - stan::math::assign(half_K,(0.5 * K)); - validate_non_negative_index("sqrt_inv_N", "J", J); - sqrt_inv_N = std::vector(J,double(0)); - stan::math::fill(sqrt_inv_N,DUMMY_VAR__); - validate_non_negative_index("sqrt_Nm1", "J", J); - sqrt_Nm1 = std::vector(J,double(0)); - stan::math::fill(sqrt_Nm1,DUMMY_VAR__); - - try { - for (int j = 1; j <= J; ++j) { - - stan::math::assign(get_base1_lhs(sqrt_inv_N,j,"sqrt_inv_N",1), sqrt((1.0 / get_base1(N,j,"N",1)))); - stan::math::assign(get_base1_lhs(sqrt_Nm1,j,"sqrt_Nm1",1), sqrt((get_base1(N,j,"N",1) - 1.0))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("u", "K", K); - validate_non_negative_index("u", "J", J); - num_params_r__ += (K) * J; - validate_non_negative_index("z_alpha", "(J * has_intercept)", (J * has_intercept)); - num_params_r__ += (J * has_intercept); - validate_non_negative_index("R2", "J", J); - num_params_r__ += J; - validate_non_negative_index("log_omega", "(J * (1 - prior_PD))", (J * (1 - prior_PD))); - num_params_r__ += (J * (1 - prior_PD)); - } - - ~model_lm() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("u"))) - throw std::runtime_error("variable u missing"); - vals_r__ = context__.vals_r("u"); - pos__ = 0U; - validate_non_negative_index("u", "J", J); - validate_non_negative_index("u", "K", K); - context__.validate_dims("initialization", "u", "vector_d", context__.to_vec(J,K)); - // generate_declaration u - std::vector u(J,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < J; ++i0__) - u[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < J; ++i0__) - try { - writer__.unit_vector_unconstrain(u[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable u: ") + e.what()); - } - - if (!(context__.contains_r("z_alpha"))) - throw std::runtime_error("variable z_alpha missing"); - vals_r__ = context__.vals_r("z_alpha"); - pos__ = 0U; - validate_non_negative_index("z_alpha", "(J * has_intercept)", (J * has_intercept)); - context__.validate_dims("initialization", "z_alpha", "double", context__.to_vec((J * has_intercept))); - // generate_declaration z_alpha - std::vector z_alpha((J * has_intercept),double(0)); - for (int i0__ = 0U; i0__ < (J * has_intercept); ++i0__) - z_alpha[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (J * has_intercept); ++i0__) - try { - writer__.scalar_unconstrain(z_alpha[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_alpha: ") + e.what()); - } - - if (!(context__.contains_r("R2"))) - throw std::runtime_error("variable R2 missing"); - vals_r__ = context__.vals_r("R2"); - pos__ = 0U; - validate_non_negative_index("R2", "J", J); - context__.validate_dims("initialization", "R2", "double", context__.to_vec(J)); - // generate_declaration R2 - std::vector R2(J,double(0)); - for (int i0__ = 0U; i0__ < J; ++i0__) - R2[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < J; ++i0__) - try { - writer__.scalar_lub_unconstrain(0,1,R2[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable R2: ") + e.what()); - } - - if (!(context__.contains_r("log_omega"))) - throw std::runtime_error("variable log_omega missing"); - vals_r__ = context__.vals_r("log_omega"); - pos__ = 0U; - validate_non_negative_index("log_omega", "(J * (1 - prior_PD))", (J * (1 - prior_PD))); - context__.validate_dims("initialization", "log_omega", "vector_d", context__.to_vec((J * (1 - prior_PD)))); - // generate_declaration log_omega - vector_d log_omega(static_cast((J * (1 - prior_PD)))); - for (int j1__ = 0U; j1__ < (J * (1 - prior_PD)); ++j1__) - log_omega(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(log_omega); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable log_omega: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector > u; - size_t dim_u_0__ = J; - u.reserve(dim_u_0__); - for (size_t k_0__ = 0; k_0__ < dim_u_0__; ++k_0__) { - if (jacobian__) - u.push_back(in__.unit_vector_constrain(K,lp__)); - else - u.push_back(in__.unit_vector_constrain(K)); - } - - vector z_alpha; - size_t dim_z_alpha_0__ = (J * has_intercept); - z_alpha.reserve(dim_z_alpha_0__); - for (size_t k_0__ = 0; k_0__ < dim_z_alpha_0__; ++k_0__) { - if (jacobian__) - z_alpha.push_back(in__.scalar_constrain(lp__)); - else - z_alpha.push_back(in__.scalar_constrain()); - } - - vector R2; - size_t dim_R2_0__ = J; - R2.reserve(dim_R2_0__); - for (size_t k_0__ = 0; k_0__ < dim_R2_0__; ++k_0__) { - if (jacobian__) - R2.push_back(in__.scalar_lub_constrain(0,1,lp__)); - else - R2.push_back(in__.scalar_lub_constrain(0,1)); - } - - Eigen::Matrix log_omega; - (void) log_omega; // dummy to suppress unused var warning - if (jacobian__) - log_omega = in__.vector_constrain((J * (1 - prior_PD)),lp__); - else - log_omega = in__.vector_constrain((J * (1 - prior_PD))); - - - // transformed parameters - validate_non_negative_index("alpha", "(J * has_intercept)", (J * has_intercept)); - vector alpha((J * has_intercept)); - stan::math::initialize(alpha, DUMMY_VAR__); - stan::math::fill(alpha,DUMMY_VAR__); - validate_non_negative_index("theta", "K", K); - validate_non_negative_index("theta", "J", J); - vector > theta(J, (Eigen::Matrix (static_cast(K)))); - stan::math::initialize(theta, DUMMY_VAR__); - stan::math::fill(theta,DUMMY_VAR__); - validate_non_negative_index("sigma", "J", J); - vector sigma(J); - stan::math::initialize(sigma, DUMMY_VAR__); - stan::math::fill(sigma,DUMMY_VAR__); - - - try { - for (int j = 1; j <= J; ++j) { - { - T__ Delta_y; - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, DUMMY_VAR__); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,(logical_eq(prior_PD,0) ? stan::math::promote_scalar((get_base1(s_Y,j,"s_Y",1) * exp(get_base1(log_omega,j,"log_omega",1)))) : stan::math::promote_scalar(1) )); - - - if (as_bool(logical_gt(K,1))) { - stan::math::assign(get_base1_lhs(theta,j,"theta",1), multiply(multiply(multiply(get_base1(u,j,"u",1),sqrt(get_base1(R2,j,"R2",1))),get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)),Delta_y)); - } else { - stan::math::assign(get_base1_lhs(get_base1_lhs(theta,j,"theta",1),1,"theta",2), (((get_base1(get_base1(u,j,"u",1),1,"u",2) * sqrt(get_base1(R2,j,"R2",1))) * get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)) * Delta_y)); - } - stan::math::assign(get_base1_lhs(sigma,j,"sigma",1), (Delta_y * sqrt((1 - get_base1(R2,j,"R2",1))))); - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,0))) { - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), get_base1(z_alpha,j,"z_alpha",1)); - } else if (as_bool(logical_eq(prior_scale_for_intercept,0))) { - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), (((get_base1(z_alpha,j,"z_alpha",1) * Delta_y) * get_base1(sqrt_inv_N,j,"sqrt_inv_N",1)) + prior_mean_for_intercept)); - } else { - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), ((get_base1(z_alpha,j,"z_alpha",1) * prior_scale_for_intercept) + prior_mean_for_intercept)); - } - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < (J * has_intercept); ++i0__) { - if (stan::math::is_uninitialized(alpha[i0__])) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: alpha" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < J; ++i0__) { - for (int i1__ = 0; i1__ < K; ++i1__) { - if (stan::math::is_uninitialized(theta[i0__](i1__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta" << '[' << i0__ << ']' << '[' << i1__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - } - for (int i0__ = 0; i0__ < J; ++i0__) { - if (stan::math::is_uninitialized(sigma[i0__])) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: sigma" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"sigma[k0__]",sigma[k0__],0); - } - - // model body - try { - - for (int j = 1; j <= J; ++j) { - - if (as_bool(logical_eq(prior_PD,0))) { - { - T__ dummy; - (void) dummy; // dummy to suppress unused var warning - - stan::math::initialize(dummy, DUMMY_VAR__); - stan::math::fill(dummy,DUMMY_VAR__); - T__ shift; - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, DUMMY_VAR__); - stan::math::fill(shift,DUMMY_VAR__); - - - stan::math::assign(shift, dot_product(get_base1(xbarR_inv,j,"xbarR_inv",1),get_base1(theta,j,"theta",1))); - stan::math::assign(dummy, ll_mvn_ols_qr_lp(get_base1(theta,j,"theta",1),get_base1(Rb,j,"Rb",1),(logical_eq(has_intercept,1) ? stan::math::promote_scalar((get_base1(alpha,j,"alpha",1) + shift)) : stan::math::promote_scalar(shift) ),get_base1(ybar,j,"ybar",1),get_base1(SSR,j,"SSR",1),get_base1(sigma,j,"sigma",1),get_base1(N,j,"N",1), lp__, lp_accum__, pstream__)); - } - } - } - if (as_bool((primitive_value(logical_eq(has_intercept,1)) && primitive_value(logical_gt(prior_dist_for_intercept,0))))) { - lp_accum__.add(normal_log(z_alpha,0,1)); - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(beta_log(R2,half_K,eta)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("u"); - names__.push_back("z_alpha"); - names__.push_back("R2"); - names__.push_back("log_omega"); - names__.push_back("alpha"); - names__.push_back("theta"); - names__.push_back("sigma"); - names__.push_back("mean_PPD"); - names__.push_back("beta"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(J); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J * has_intercept)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J * (1 - prior_PD))); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J * has_intercept)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dims__.push_back(K); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_lm_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector u; - size_t dim_u_0__ = J; - for (size_t k_0__ = 0; k_0__ < dim_u_0__; ++k_0__) { - u.push_back(in__.unit_vector_constrain(K)); - } - vector z_alpha; - size_t dim_z_alpha_0__ = (J * has_intercept); - for (size_t k_0__ = 0; k_0__ < dim_z_alpha_0__; ++k_0__) { - z_alpha.push_back(in__.scalar_constrain()); - } - vector R2; - size_t dim_R2_0__ = J; - for (size_t k_0__ = 0; k_0__ < dim_R2_0__; ++k_0__) { - R2.push_back(in__.scalar_lub_constrain(0,1)); - } - vector_d log_omega = in__.vector_constrain((J * (1 - prior_PD))); - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(u[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < (J * has_intercept); ++k_0__) { - vars__.push_back(z_alpha[k_0__]); - } - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(R2[k_0__]); - } - for (int k_0__ = 0; k_0__ < (J * (1 - prior_PD)); ++k_0__) { - vars__.push_back(log_omega[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("alpha", "(J * has_intercept)", (J * has_intercept)); - vector alpha((J * has_intercept), 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - validate_non_negative_index("theta", "K", K); - validate_non_negative_index("theta", "J", J); - vector theta(J, (vector_d(static_cast(K)))); - stan::math::initialize(theta, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta,DUMMY_VAR__); - validate_non_negative_index("sigma", "J", J); - vector sigma(J, 0.0); - stan::math::initialize(sigma, std::numeric_limits::quiet_NaN()); - stan::math::fill(sigma,DUMMY_VAR__); - - - try { - for (int j = 1; j <= J; ++j) { - { - double Delta_y(0.0); - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, std::numeric_limits::quiet_NaN()); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,(logical_eq(prior_PD,0) ? stan::math::promote_scalar((get_base1(s_Y,j,"s_Y",1) * exp(get_base1(log_omega,j,"log_omega",1)))) : stan::math::promote_scalar(1) )); - - - if (as_bool(logical_gt(K,1))) { - stan::math::assign(get_base1_lhs(theta,j,"theta",1), multiply(multiply(multiply(get_base1(u,j,"u",1),sqrt(get_base1(R2,j,"R2",1))),get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)),Delta_y)); - } else { - stan::math::assign(get_base1_lhs(get_base1_lhs(theta,j,"theta",1),1,"theta",2), (((get_base1(get_base1(u,j,"u",1),1,"u",2) * sqrt(get_base1(R2,j,"R2",1))) * get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)) * Delta_y)); - } - stan::math::assign(get_base1_lhs(sigma,j,"sigma",1), (Delta_y * sqrt((1 - get_base1(R2,j,"R2",1))))); - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,0))) { - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), get_base1(z_alpha,j,"z_alpha",1)); - } else if (as_bool(logical_eq(prior_scale_for_intercept,0))) { - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), (((get_base1(z_alpha,j,"z_alpha",1) * Delta_y) * get_base1(sqrt_inv_N,j,"sqrt_inv_N",1)) + prior_mean_for_intercept)); - } else { - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), ((get_base1(z_alpha,j,"z_alpha",1) * prior_scale_for_intercept) + prior_mean_for_intercept)); - } - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"sigma[k0__]",sigma[k0__],0); - } - - // write transformed parameters - for (int k_0__ = 0; k_0__ < (J * has_intercept); ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(theta[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(sigma[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("mean_PPD", "J", J); - vector mean_PPD(J, 0.0); - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - validate_non_negative_index("beta", "K", K); - validate_non_negative_index("beta", "J", J); - vector beta(J, (vector_d(static_cast(K)))); - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - - - try { - for (int j = 1; j <= J; ++j) { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - stan::math::assign(shift, dot_product(get_base1(xbarR_inv,j,"xbarR_inv",1),get_base1(theta,j,"theta",1))); - stan::math::assign(get_base1_lhs(mean_PPD,j,"mean_PPD",1), normal_rng((logical_eq(has_intercept,1) ? stan::math::promote_scalar((get_base1(alpha,j,"alpha",1) + shift)) : stan::math::promote_scalar(shift) ),(get_base1(sigma,j,"sigma",1) * get_base1(sqrt_inv_N,j,"sqrt_inv_N",1)), base_rng__)); - stan::math::assign(get_base1_lhs(beta,j,"beta",1), multiply(get_base1(R_inv,j,"R_inv",1),get_base1(theta,j,"theta",1))); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(mean_PPD[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(beta[k_0__][k_1__]); - } - } - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_lm"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "R2" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J * (1 - prior_PD)); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "log_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "sigma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "R2" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J * (1 - prior_PD)); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "log_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "sigma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_polr_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_polr"); - reader.add_event(313, 313, "end", "model_polr"); - return reader; -} - -template -typename boost::math::tools::promote_args::type -CDF_polr(const T0__& x, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(inv_logit(x)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(Phi(x)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(gumbel_cdf(x,0,1)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(inv_cloglog(x)); - } else if (as_bool(logical_eq(link,5))) { - return stan::math::promote_scalar(cauchy_cdf(x,0,1)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(x); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CDF_polr_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& x, - const int& link, std::ostream* pstream__) const { - return CDF_polr(x, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_polr(const std::vector& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& cutpoints, - const int& link, - const T4__& alpha, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - int J(0); - (void) J; // dummy to suppress unused var warning - - stan::math::fill(J, std::numeric_limits::min()); - stan::math::assign(J,(rows(cutpoints) + 1)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool((primitive_value(logical_lt(link,1)) || primitive_value(logical_gt(link,5))))) { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - if (as_bool(logical_eq(alpha,1))) { - for (int n = 1; n <= N; ++n) { - - if (as_bool(logical_eq(get_base1(y,n,"y",1),1))) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), CDF_polr((get_base1(cutpoints,1,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__)); - } else if (as_bool(logical_eq(get_base1(y,n,"y",1),J))) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), (1 - CDF_polr((get_base1(cutpoints,(J - 1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__))); - } else { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), (CDF_polr((get_base1(cutpoints,get_base1(y,n,"y",1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__) - CDF_polr((get_base1(cutpoints,(get_base1(y,n,"y",1) - 1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__))); - } - } - } else { - for (int n = 1; n <= N; ++n) { - - if (as_bool(logical_eq(get_base1(y,n,"y",1),1))) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), pow(CDF_polr((get_base1(cutpoints,1,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__),alpha)); - } else if (as_bool(logical_eq(get_base1(y,n,"y",1),J))) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), (1 - pow(CDF_polr((get_base1(cutpoints,(J - 1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__),alpha))); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "alpha not allowed with more than 2 outcome categories"; - throw std::domain_error(errmsg_stream__.str()); - } - } - } - return stan::math::promote_scalar(log(ll)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_polr_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& cutpoints, - const int& link, - const T4__& alpha, std::ostream* pstream__) const { - return pw_polr(y, eta, cutpoints, link, alpha, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_cutpoints(const Eigen::Matrix& probabilities, - const T1__& scale, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int C(0); - (void) C; // dummy to suppress unused var warning - - stan::math::fill(C, std::numeric_limits::min()); - stan::math::assign(C,(rows(probabilities) - 1)); - validate_non_negative_index("cutpoints", "C", C); - Eigen::Matrix cutpoints(static_cast(C)); - (void) cutpoints; // dummy to suppress unused var warning - - stan::math::initialize(cutpoints, std::numeric_limits::quiet_NaN()); - stan::math::fill(cutpoints,DUMMY_VAR__); - fun_scalar_t__ running_sum; - (void) running_sum; // dummy to suppress unused var warning - - stan::math::initialize(running_sum, std::numeric_limits::quiet_NaN()); - stan::math::fill(running_sum,DUMMY_VAR__); - stan::math::assign(running_sum,0); - - - if (as_bool(logical_eq(link,1))) { - for (int c = 1; c <= C; ++c) { - - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), logit(running_sum)); - } - } else if (as_bool(logical_eq(link,2))) { - for (int c = 1; c <= C; ++c) { - - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), inv_Phi(running_sum)); - } - } else if (as_bool(logical_eq(link,3))) { - for (int c = 1; c <= C; ++c) { - - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), -(log(-(log(running_sum))))); - } - } else if (as_bool(logical_eq(link,4))) { - for (int c = 1; c <= C; ++c) { - - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), log(-(log1m(running_sum)))); - } - } else if (as_bool(logical_eq(link,5))) { - for (int c = 1; c <= C; ++c) { - - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), tan((stan::math::pi() * (running_sum - 0.5)))); - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(multiply(scale,cutpoints)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_cutpoints_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& probabilities, - const T1__& scale, - const int& link, std::ostream* pstream__) const { - return make_cutpoints(probabilities, scale, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -draw_ystar_rng(const T0__& lower, - const T1__& upper, - const T2__& eta, - const int& link, RNG& base_rng__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int iter(0); - (void) iter; // dummy to suppress unused var warning - - stan::math::fill(iter, std::numeric_limits::min()); - stan::math::assign(iter,0); - fun_scalar_t__ ystar; - (void) ystar; // dummy to suppress unused var warning - - stan::math::initialize(ystar, std::numeric_limits::quiet_NaN()); - stan::math::fill(ystar,DUMMY_VAR__); - stan::math::assign(ystar,stan::math::not_a_number()); - - - if (as_bool(logical_gte(lower,upper))) { - std::stringstream errmsg_stream__; - errmsg_stream__ << "lower must be less than upper"; - throw std::domain_error(errmsg_stream__.str()); - } - if (as_bool(logical_eq(link,1))) { - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - stan::math::assign(ystar, logistic_rng(eta,1, base_rng__)); - } - } else if (as_bool(logical_eq(link,2))) { - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - stan::math::assign(ystar, normal_rng(eta,1, base_rng__)); - } - } else if (as_bool(logical_eq(link,3))) { - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - stan::math::assign(ystar, gumbel_rng(eta,1, base_rng__)); - } - } else if (as_bool(logical_eq(link,4))) { - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - stan::math::assign(ystar, log(-(log1m(uniform_rng(0,1, base_rng__))))); - } - } else if (as_bool(logical_eq(link,5))) { - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - stan::math::assign(ystar, cauchy_rng(eta,1, base_rng__)); - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ystar); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct draw_ystar_rng_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& lower, - const T1__& upper, - const T2__& eta, - const int& link, RNG& base_rng__, std::ostream* pstream__) const { - return draw_ystar_rng(lower, upper, eta, link, base_rng__, pstream__); - } -}; - -class model_polr : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - int J; - vector y; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - double regularization; - vector_d prior_counts; - int is_skewed; - double shape; - double rate; - int do_residuals; - double half_K; - double sqrt_Nm1; - int is_constant; - vector_d beta_smooth; -public: - model_polr(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_polr(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_polr_namespace::model_polr"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "J", "int", context__.to_vec()); - J = int(0); - vals_i__ = context__.vals_i("J"); - pos__ = 0; - J = vals_i__[pos__++]; - validate_non_negative_index("y", "N", N); - context__.validate_dims("data initialization", "y", "int", context__.to_vec(N)); - validate_non_negative_index("y", "N", N); - y = std::vector(N,int(0)); - vals_i__ = context__.vals_i("y"); - pos__ = 0; - size_t y_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < y_limit_0__; ++i_0__) { - y[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec()); - regularization = double(0); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - regularization = vals_r__[pos__++]; - validate_non_negative_index("prior_counts", "J", J); - context__.validate_dims("data initialization", "prior_counts", "vector_d", context__.to_vec(J)); - validate_non_negative_index("prior_counts", "J", J); - prior_counts = vector_d(static_cast(J)); - vals_r__ = context__.vals_r("prior_counts"); - pos__ = 0; - size_t prior_counts_i_vec_lim__ = J; - for (size_t i_vec__ = 0; i_vec__ < prior_counts_i_vec_lim__; ++i_vec__) { - prior_counts[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "is_skewed", "int", context__.to_vec()); - is_skewed = int(0); - vals_i__ = context__.vals_i("is_skewed"); - pos__ = 0; - is_skewed = vals_i__[pos__++]; - context__.validate_dims("data initialization", "shape", "double", context__.to_vec()); - shape = double(0); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - shape = vals_r__[pos__++]; - context__.validate_dims("data initialization", "rate", "double", context__.to_vec()); - rate = double(0); - vals_r__ = context__.vals_r("rate"); - pos__ = 0; - rate = vals_r__[pos__++]; - context__.validate_dims("data initialization", "do_residuals", "int", context__.to_vec()); - do_residuals = int(0); - vals_i__ = context__.vals_i("do_residuals"); - pos__ = 0; - do_residuals = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - check_greater_or_equal(function__,"J",J,2); - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"y[k0__]",y[k0__],1); - check_less_or_equal(function__,"y[k0__]",y[k0__],J); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"regularization",regularization,0); - check_greater_or_equal(function__,"prior_counts",prior_counts,0); - check_greater_or_equal(function__,"is_skewed",is_skewed,0); - check_less_or_equal(function__,"is_skewed",is_skewed,1); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"rate",rate,0); - check_greater_or_equal(function__,"do_residuals",do_residuals,0); - check_less_or_equal(function__,"do_residuals",do_residuals,1); - // initialize data variables - half_K = double(0); - stan::math::fill(half_K,DUMMY_VAR__); - stan::math::assign(half_K,(0.5 * K)); - sqrt_Nm1 = double(0); - stan::math::fill(sqrt_Nm1,DUMMY_VAR__); - stan::math::assign(sqrt_Nm1,sqrt((N - 1.0))); - is_constant = int(0); - stan::math::fill(is_constant, std::numeric_limits::min()); - stan::math::assign(is_constant,1); - validate_non_negative_index("beta_smooth", "0", 0); - beta_smooth = vector_d(static_cast(0)); - stan::math::fill(beta_smooth,DUMMY_VAR__); - - try { - for (int j = 1; j <= J; ++j) { - if (as_bool(logical_neq(get_base1(prior_counts,j,"prior_counts",1),1))) { - stan::math::assign(is_constant, 0); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - check_greater_or_equal(function__,"half_K",half_K,0); - check_greater_or_equal(function__,"sqrt_Nm1",sqrt_Nm1,0); - check_greater_or_equal(function__,"is_constant",is_constant,0); - check_less_or_equal(function__,"is_constant",is_constant,1); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("pi", "J", J); - num_params_r__ += (J - 1); - validate_non_negative_index("u", "K", K); - num_params_r__ += (K); - ++num_params_r__; - validate_non_negative_index("alpha", "is_skewed", is_skewed); - num_params_r__ += is_skewed; - } - - ~model_polr() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("pi"))) - throw std::runtime_error("variable pi missing"); - vals_r__ = context__.vals_r("pi"); - pos__ = 0U; - validate_non_negative_index("pi", "J", J); - context__.validate_dims("initialization", "pi", "vector_d", context__.to_vec(J)); - // generate_declaration pi - vector_d pi(static_cast(J)); - for (int j1__ = 0U; j1__ < J; ++j1__) - pi(j1__) = vals_r__[pos__++]; - try { - writer__.simplex_unconstrain(pi); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable pi: ") + e.what()); - } - - if (!(context__.contains_r("u"))) - throw std::runtime_error("variable u missing"); - vals_r__ = context__.vals_r("u"); - pos__ = 0U; - validate_non_negative_index("u", "K", K); - context__.validate_dims("initialization", "u", "vector_d", context__.to_vec(K)); - // generate_declaration u - vector_d u(static_cast(K)); - for (int j1__ = 0U; j1__ < K; ++j1__) - u(j1__) = vals_r__[pos__++]; - try { - writer__.unit_vector_unconstrain(u); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable u: ") + e.what()); - } - - if (!(context__.contains_r("R2"))) - throw std::runtime_error("variable R2 missing"); - vals_r__ = context__.vals_r("R2"); - pos__ = 0U; - context__.validate_dims("initialization", "R2", "double", context__.to_vec()); - // generate_declaration R2 - double R2(0); - R2 = vals_r__[pos__++]; - try { - writer__.scalar_lub_unconstrain(0,1,R2); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable R2: ") + e.what()); - } - - if (!(context__.contains_r("alpha"))) - throw std::runtime_error("variable alpha missing"); - vals_r__ = context__.vals_r("alpha"); - pos__ = 0U; - validate_non_negative_index("alpha", "is_skewed", is_skewed); - context__.validate_dims("initialization", "alpha", "double", context__.to_vec(is_skewed)); - // generate_declaration alpha - std::vector alpha(is_skewed,double(0)); - for (int i0__ = 0U; i0__ < is_skewed; ++i0__) - alpha[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < is_skewed; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,alpha[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable alpha: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - Eigen::Matrix pi; - (void) pi; // dummy to suppress unused var warning - if (jacobian__) - pi = in__.simplex_constrain(J,lp__); - else - pi = in__.simplex_constrain(J); - - Eigen::Matrix u; - (void) u; // dummy to suppress unused var warning - if (jacobian__) - u = in__.unit_vector_constrain(K,lp__); - else - u = in__.unit_vector_constrain(K); - - T__ R2; - (void) R2; // dummy to suppress unused var warning - if (jacobian__) - R2 = in__.scalar_lub_constrain(0,1,lp__); - else - R2 = in__.scalar_lub_constrain(0,1); - - vector alpha; - size_t dim_alpha_0__ = is_skewed; - alpha.reserve(dim_alpha_0__); - for (size_t k_0__ = 0; k_0__ < dim_alpha_0__; ++k_0__) { - if (jacobian__) - alpha.push_back(in__.scalar_lb_constrain(0,lp__)); - else - alpha.push_back(in__.scalar_lb_constrain(0)); - } - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("cutpoints", "(J - 1)", (J - 1)); - Eigen::Matrix cutpoints(static_cast((J - 1))); - (void) cutpoints; // dummy to suppress unused var warning - - stan::math::initialize(cutpoints, DUMMY_VAR__); - stan::math::fill(cutpoints,DUMMY_VAR__); - - - try { - { - T__ Delta_y; - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, DUMMY_VAR__); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,inv(sqrt((1 - R2)))); - - - if (as_bool(logical_gt(K,1))) { - stan::math::assign(beta, multiply(multiply(multiply(u,sqrt(R2)),Delta_y),sqrt_Nm1)); - } else { - stan::math::assign(get_base1_lhs(beta,1,"beta",1), (((get_base1(u,1,"u",1) * sqrt(R2)) * Delta_y) * sqrt_Nm1)); - } - stan::math::assign(cutpoints, make_cutpoints(pi,Delta_y,link, pstream__)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (J - 1); ++i0__) { - if (stan::math::is_uninitialized(cutpoints(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: cutpoints" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - - if (as_bool(logical_eq(is_skewed,0))) { - lp_accum__.add(pw_polr(y,eta,cutpoints,link,1.0, pstream__)); - } else { - lp_accum__.add(pw_polr(y,eta,cutpoints,link,get_base1(alpha,1,"alpha",1), pstream__)); - } - } else if (as_bool(logical_eq(prior_PD,0))) { - - if (as_bool(logical_eq(is_skewed,0))) { - lp_accum__.add(dot_product(weights,pw_polr(y,eta,cutpoints,link,1.0, pstream__))); - } else { - lp_accum__.add(dot_product(weights,pw_polr(y,eta,cutpoints,link,get_base1(alpha,1,"alpha",1), pstream__))); - } - } - if (as_bool(logical_eq(is_constant,0))) { - lp_accum__.add(dirichlet_log(pi,prior_counts)); - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(beta_log(R2,half_K,regularization)); - } - if (as_bool(logical_eq(is_skewed,1))) { - lp_accum__.add(gamma_log(alpha,shape,rate)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("pi"); - names__.push_back("u"); - names__.push_back("R2"); - names__.push_back("alpha"); - names__.push_back("beta"); - names__.push_back("cutpoints"); - names__.push_back("mean_PPD"); - names__.push_back("residuals"); - names__.push_back("zeta"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(is_skewed); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J - 1)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(J,2) ? J : 1 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((do_residuals ? N : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J - 1)); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_polr_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector_d pi = in__.simplex_constrain(J); - vector_d u = in__.unit_vector_constrain(K); - double R2 = in__.scalar_lub_constrain(0,1); - vector alpha; - size_t dim_alpha_0__ = is_skewed; - for (size_t k_0__ = 0; k_0__ < dim_alpha_0__; ++k_0__) { - alpha.push_back(in__.scalar_lb_constrain(0)); - } - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(pi[k_0__]); - } - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(u[k_0__]); - } - vars__.push_back(R2); - for (int k_0__ = 0; k_0__ < is_skewed; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("cutpoints", "(J - 1)", (J - 1)); - vector_d cutpoints(static_cast((J - 1))); - (void) cutpoints; // dummy to suppress unused var warning - - stan::math::initialize(cutpoints, std::numeric_limits::quiet_NaN()); - stan::math::fill(cutpoints,DUMMY_VAR__); - - - try { - { - double Delta_y(0.0); - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, std::numeric_limits::quiet_NaN()); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,inv(sqrt((1 - R2)))); - - - if (as_bool(logical_gt(K,1))) { - stan::math::assign(beta, multiply(multiply(multiply(u,sqrt(R2)),Delta_y),sqrt_Nm1)); - } else { - stan::math::assign(get_base1_lhs(beta,1,"beta",1), (((get_base1(u,1,"u",1) * sqrt(R2)) * Delta_y) * sqrt_Nm1)); - } - stan::math::assign(cutpoints, make_cutpoints(pi,Delta_y,link, pstream__)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < (J - 1); ++k_0__) { - vars__.push_back(cutpoints[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("mean_PPD", "(logical_gt(J,2) ? J : 1 )", (logical_gt(J,2) ? J : 1 )); - vector_d mean_PPD(static_cast((logical_gt(J,2) ? J : 1 ))); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,rep_vector(0,(logical_gt(J,2) ? J : 1 ))); - validate_non_negative_index("residuals", "(do_residuals ? N : 0 )", (do_residuals ? N : 0 )); - vector_d residuals(static_cast((do_residuals ? N : 0 ))); - (void) residuals; // dummy to suppress unused var warning - - stan::math::initialize(residuals, std::numeric_limits::quiet_NaN()); - stan::math::fill(residuals,DUMMY_VAR__); - validate_non_negative_index("zeta", "(J - 1)", (J - 1)); - vector_d zeta(static_cast((J - 1))); - (void) zeta; // dummy to suppress unused var warning - - stan::math::initialize(zeta, std::numeric_limits::quiet_NaN()); - stan::math::fill(zeta,DUMMY_VAR__); - - - try { - if (as_bool(dense_X)) { - stan::math::assign(zeta, add(cutpoints,dot_product(xbar,beta))); - } else { - stan::math::assign(zeta, cutpoints); - } - if (as_bool(logical_eq(J,2))) { - stan::math::assign(zeta, minus(zeta)); - } - { - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_gt(K,0))) { - - if (as_bool(dense_X)) { - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - stan::math::assign(eta, rep_vector(0.0,N)); - } - if (as_bool(logical_eq(has_offset,1))) { - stan::math::assign(eta, add(eta,offset)); - } - if (as_bool(K_smooth)) { - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - for (int n = 1; n <= N; ++n) { - { - int y_tilde(0); - (void) y_tilde; // dummy to suppress unused var warning - - stan::math::fill(y_tilde, std::numeric_limits::min()); - validate_non_negative_index("theta", "J", J); - vector_d theta(static_cast(J)); - (void) theta; // dummy to suppress unused var warning - - stan::math::initialize(theta, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta,DUMMY_VAR__); - double previous(0.0); - (void) previous; // dummy to suppress unused var warning - - stan::math::initialize(previous, std::numeric_limits::quiet_NaN()); - stan::math::fill(previous,DUMMY_VAR__); - - - stan::math::assign(get_base1_lhs(theta,1,"theta",1), CDF_polr((get_base1(cutpoints,1,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__)); - stan::math::assign(previous, get_base1(theta,1,"theta",1)); - if (as_bool(is_skewed)) { - stan::math::assign(get_base1_lhs(theta,1,"theta",1), pow(get_base1(theta,1,"theta",1),get_base1(alpha,1,"alpha",1))); - } - for (int j = 2; j <= (J - 1); ++j) { - { - double current(0.0); - (void) current; // dummy to suppress unused var warning - - stan::math::initialize(current, std::numeric_limits::quiet_NaN()); - stan::math::fill(current,DUMMY_VAR__); - - - stan::math::assign(current, CDF_polr((get_base1(cutpoints,j,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__)); - stan::math::assign(get_base1_lhs(theta,j,"theta",1), (current - previous)); - stan::math::assign(previous, current); - } - } - if (as_bool(logical_eq(is_skewed,0))) { - stan::math::assign(get_base1_lhs(theta,J,"theta",1), (1 - previous)); - } else { - stan::math::assign(get_base1_lhs(theta,J,"theta",1), (1 - pow(previous,get_base1(alpha,1,"alpha",1)))); - } - if (as_bool((primitive_value(logical_lte(previous,0)) || primitive_value(logical_gte(previous,1))))) { - - } else if (as_bool(logical_eq(J,2))) { - - stan::math::assign(get_base1_lhs(mean_PPD,1,"mean_PPD",1), (get_base1(mean_PPD,1,"mean_PPD",1) + bernoulli_rng(get_base1(theta,J,"theta",1), base_rng__))); - } else { - - stan::math::assign(y_tilde, categorical_rng(theta, base_rng__)); - stan::math::assign(get_base1_lhs(mean_PPD,y_tilde,"mean_PPD",1), (get_base1(mean_PPD,y_tilde,"mean_PPD",1) + 1)); - } - if (as_bool(do_residuals)) { - { - double ystar(0.0); - (void) ystar; // dummy to suppress unused var warning - - stan::math::initialize(ystar, std::numeric_limits::quiet_NaN()); - stan::math::fill(ystar,DUMMY_VAR__); - - - if (as_bool(logical_eq(get_base1(y,n,"y",1),1))) { - stan::math::assign(ystar, draw_ystar_rng(stan::math::negative_infinity(),get_base1(cutpoints,1,"cutpoints",1),get_base1(eta,n,"eta",1),link, base_rng__, pstream__)); - } else if (as_bool(logical_eq(get_base1(y,n,"y",1),J))) { - stan::math::assign(ystar, draw_ystar_rng(get_base1(cutpoints,(J - 1),"cutpoints",1),stan::math::positive_infinity(),get_base1(eta,n,"eta",1),link, base_rng__, pstream__)); - } else { - stan::math::assign(ystar, draw_ystar_rng(get_base1(cutpoints,(get_base1(y,n,"y",1) - 1),"cutpoints",1),get_base1(cutpoints,get_base1(y,n,"y",1),"cutpoints",1),get_base1(eta,n,"eta",1),link, base_rng__, pstream__)); - } - stan::math::assign(get_base1_lhs(residuals,n,"residuals",1), (ystar - get_base1(eta,n,"eta",1))); - } - } - } - } - stan::math::assign(mean_PPD, divide(mean_PPD,N)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < (logical_gt(J,2) ? J : 1 ); ++k_0__) { - vars__.push_back(mean_PPD[k_0__]); - } - for (int k_0__ = 0; k_0__ < (do_residuals ? N : 0 ); ++k_0__) { - vars__.push_back(residuals[k_0__]); - } - for (int k_0__ = 0; k_0__ < (J - 1); ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_polr"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "pi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "R2"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= is_skewed; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "cutpoints" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= (logical_gt(J,2) ? J : 1 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (do_residuals ? N : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "residuals" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "pi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "R2"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= is_skewed; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "cutpoints" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= (logical_gt(J,2) ? J : 1 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (do_residuals ? N : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "residuals" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_spatial_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_spatial"); - reader.add_event(968, 968, "end", "model_spatial"); - return reader; -} - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gauss(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gauss(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gauss(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(subtract((-(0.5) * log((6.2831853071795862 * sigma))),multiply(0.5,square(divide(subtract(y,linkinv_gauss(eta,link, pstream__)),sigma))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) const { - return pw_gauss(y, eta, sigma, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gamma(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gamma(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -GammaReg(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ ret; - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - stan::math::assign(ret,((rows(y) * ((shape * log(shape)) - stan::math::lgamma(shape))) + ((shape - 1) * sum_log_y))); - - - if (as_bool(logical_eq(link,2))) { - stan::math::assign(ret, ((ret - (shape * sum(eta))) - (shape * sum(elt_divide(y,exp(eta)))))); - } else if (as_bool(logical_eq(link,1))) { - stan::math::assign(ret, ((ret - (shape * sum(log(eta)))) - (shape * sum(elt_divide(y,eta))))); - } else if (as_bool(logical_eq(link,3))) { - stan::math::assign(ret, ((ret + (shape * sum(log(eta)))) - (shape * dot_product(eta,y)))); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct GammaReg_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) const { - return GammaReg(y, eta, shape, link, sum_log_y, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gamma(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,3))) { - - for (int n = 1; n <= N; ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape * get_base1(eta,n,"eta",1)))); - } - } else if (as_bool(logical_eq(link,2))) { - - for (int n = 1; n <= N; ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / exp(get_base1(eta,n,"eta",1))))); - } - } else if (as_bool(logical_eq(link,1))) { - - for (int n = 1; n <= N; ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / get_base1(eta,n,"eta",1)))); - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) const { - return pw_gamma(y, eta, shape, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_inv_gaussian(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv(eta)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(inv_sqrt(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_inv_gaussian_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_inv_gaussian(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type>::type -inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(((((0.5 * rows(y)) * log((lambda / 6.2831853071795862))) - (1.5 * sum_log_y)) - ((0.5 * lambda) * dot_self(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_functor__ { - template - typename boost::math::tools::promote_args::type>::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return inv_gaussian(y, mu, lambda, sum_log_y, sqrt_y, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -pw_inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_inv_gaussian(eta,link, pstream__)); - - - return stan::math::promote_scalar(subtract(add(multiply((-(0.5) * lambda),square(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))),(0.5 * log((lambda / 6.2831853071795862)))),multiply(1.5,log_y))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_inv_gaussian_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return pw_inv_gaussian(y, eta, lambda, link, log_y, sqrt_y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -inv_gaussian_rng(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ mu2; - (void) mu2; // dummy to suppress unused var warning - - stan::math::initialize(mu2, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu2,DUMMY_VAR__); - stan::math::assign(mu2,square(mu)); - fun_scalar_t__ z; - (void) z; // dummy to suppress unused var warning - - stan::math::initialize(z, std::numeric_limits::quiet_NaN()); - stan::math::fill(z,DUMMY_VAR__); - stan::math::assign(z,uniform_rng(0,1, base_rng__)); - fun_scalar_t__ y; - (void) y; // dummy to suppress unused var warning - - stan::math::initialize(y, std::numeric_limits::quiet_NaN()); - stan::math::fill(y,DUMMY_VAR__); - stan::math::assign(y,square(normal_rng(0,1, base_rng__))); - fun_scalar_t__ x; - (void) x; // dummy to suppress unused var warning - - stan::math::initialize(x, std::numeric_limits::quiet_NaN()); - stan::math::fill(x,DUMMY_VAR__); - stan::math::assign(x,(mu + (((mu2 * y) - (mu * sqrt(((((4 * mu) * lambda) * y) + (mu2 * square(y)))))) / (2 * lambda)))); - - - if (as_bool(logical_lte(z,(mu / (mu + x))))) { - return stan::math::promote_scalar(x); - } else { - return stan::math::promote_scalar((mu2 / x)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_rng_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) const { - return inv_gaussian_rng(mu, lambda, base_rng__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(inv_cloglog(eta)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(add(0.5,divide(atan(eta),stan::math::pi()))); - } else if (as_bool(logical_eq(link,5))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,6))) { - return stan::math::promote_scalar(subtract(1,inv_cloglog(minus(eta)))); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta_z(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(square(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta_z(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - - - for (int n = 1; n <= rows(y); ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * dispersion),((1 - get_base1(mu,n,"mu",1)) * dispersion))); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) const { - return pw_beta(y, eta, dispersion, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta_z(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - validate_non_negative_index("mu_z", "rows(y)", rows(y)); - Eigen::Matrix mu_z(static_cast(rows(y))); - (void) mu_z; // dummy to suppress unused var warning - - stan::math::initialize(mu_z, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu_z,DUMMY_VAR__); - stan::math::assign(mu_z,linkinv_beta_z(eta_z,link_phi, pstream__)); - - - for (int n = 1; n <= rows(y); ++n) { - - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * get_base1(mu_z,n,"mu_z",1)),((1 - get_base1(mu,n,"mu",1)) * get_base1(mu_z,n,"mu_z",1)))); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) const { - return pw_beta_z(y, eta, eta_z, link, link_phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_binom(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(add(divide(atan(eta),stan::math::pi()),0.5)); - } else if (as_bool(logical_eq(link,4))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,5))) { - return stan::math::promote_scalar(inv_cloglog(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_binom(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -ll_binom_lp(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - lp_accum__.add(binomial_logit_log(y,trials,eta)); - } else if (as_bool(logical_lt(link,4))) { - lp_accum__.add(binomial_log(y,trials,linkinv_binom(eta,link, pstream__))); - } else if (as_bool(logical_eq(link,4))) { - - for (int n = 1; n <= num_elements(y); ++n) { - - lp_accum__.add((get_base1(y,n,"y",1) * get_base1(eta,n,"eta",1))); - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * log1m_exp(get_base1(eta,n,"eta",1)))); - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } else if (as_bool(logical_eq(link,5))) { - - for (int n = 1; n <= num_elements(y); ++n) { - { - fun_scalar_t__ neg_exp_eta; - (void) neg_exp_eta; // dummy to suppress unused var warning - - stan::math::initialize(neg_exp_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(neg_exp_eta,DUMMY_VAR__); - stan::math::assign(neg_exp_eta,-(exp(get_base1(eta,n,"eta",1)))); - - - lp_accum__.add((get_base1(y,n,"y",1) * log1m_exp(neg_exp_eta))); - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * neg_exp_eta)); - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_binom_lp_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_binom_lp(y, trials, eta, link, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_binom(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,1))) { - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_logit_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,5))) { - { - validate_non_negative_index("pi", "N", N); - Eigen::Matrix pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,linkinv_binom(eta,link, pstream__)); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(pi,n,"pi",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_binom(y, trials, eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_count(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - return stan::math::promote_scalar(square(eta)); - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_count_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_count(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_pois(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - if (as_bool(logical_eq(link,1))) { - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log_log(get_base1(y,n,"y",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,3))) { - { - validate_non_negative_index("phi", "N", N); - Eigen::Matrix phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, std::numeric_limits::quiet_NaN()); - stan::math::fill(phi,DUMMY_VAR__); - stan::math::assign(phi,linkinv_count(eta,link, pstream__)); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log(get_base1(y,n,"y",1),get_base1(phi,n,"phi",1))); - } - } - } else { - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_pois_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_pois(y, eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_nb(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("rho", "N", N); - Eigen::Matrix rho(static_cast(N)); - (void) rho; // dummy to suppress unused var warning - - stan::math::initialize(rho, std::numeric_limits::quiet_NaN()); - stan::math::fill(rho,DUMMY_VAR__); - stan::math::assign(rho,linkinv_count(eta,link, pstream__)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - for (int n = 1; n <= N; ++n) { - stan::math::assign(get_base1_lhs(ll,n,"ll",1), neg_binomial_2_log(get_base1(y,n,"y",1),get_base1(rho,n,"rho",1),theta)); - } - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_nb_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) const { - return pw_nb(y, eta, theta, link, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - stan::math::assign(pi, divide(pi,sum(pi))); - stan::math::assign(zeta_mark, (zeta_mark + nc)); - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - stan::math::assign(rho_mark, (rho_mark + 1)); - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - stan::math::assign(z_T_mark, (z_T_mark + r)); - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - for (int c = 1; c <= r; ++c) { - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - for (int c = 1; c <= nc; ++c) { - for (int r = c; r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - for (int c = 1; c <= nc; ++c) { - - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - for (int r = (c + 1); r <= nc; ++r) { - - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - stan::math::assign(b_mark, (b_mark - 1)); - for (int s = 1; s <= nc; ++s) { - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - lp_accum__.add(normal_log(z_b,0,1)); - lp_accum__.add(normal_log(z_T,0,1)); - for (int i = 1; i <= t; ++i) { - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - stan::math::assign(pos_reg, (pos_reg + 1)); - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - stan::math::assign(nu, (nu - 0.5)); - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - lp_accum__.add(gamma_log(zeta,delta,1)); - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - stan::math::assign(K, rows(z_beta)); - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - for (int k = 1; k <= K; ++k) { - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - if (as_bool(logical_gt(t,0))) { - for (int j = 1; j <= N; ++j) { - for (int i = 1; i <= t; ++i) { - - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - stan::math::assign(pos, (pos + 1)); - } - } - } - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -double -make_lower(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool(logical_eq(family,1))) { - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - if (as_bool(logical_eq(family,5))) { - - if (as_bool(logical_eq(link,2))) { - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - return stan::math::promote_scalar(0); - } - if (as_bool((primitive_value(logical_eq(family,2)) || primitive_value(logical_eq(family,3))))) { - - if (as_bool(logical_eq(link,1))) { - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - return stan::math::promote_scalar(0.0); - } - return stan::math::promote_scalar(stan::math::negative_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_lower_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_lower(family, link, pstream__); - } -}; - -double -make_upper(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,4))))) { - return stan::math::promote_scalar(0.0); - } - return stan::math::promote_scalar(stan::math::positive_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_upper_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_upper(family, link, pstream__); - } -}; - -class model_spatial : public prob_grad { -private: - int N; - int K; - matrix_d X; - int family; - int link; - int is_continuous; - int has_aux; - int model_type; - int has_intercept; - vector_d xbar; - vector trials; - vector y_int; - vector_d y_real; - int E_n; - vector > edges; - int order; - vector Q_n; - vector_d w; - vector v; - vector u; - int prior_dist_rho; - double prior_mean_rho; - double prior_scale_rho; - double prior_df_rho; - double shape1_rho; - double shape2_rho; - double scaling_factor; - int prior_dist_for_intercept; - int prior_dist; - int prior_dist_tau; - double prior_mean_for_intercept; - double prior_scale_for_intercept; - double prior_df_for_intercept; - vector_d prior_mean; - vector_d prior_scale; - vector_d prior_df; - double prior_mean_tau; - double prior_scale_tau; - double prior_df_tau; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int prior_dist_for_aux; - double prior_mean_for_aux; - double prior_scale_for_aux; - double prior_df_for_aux; - double poisson_max; - int hs; - double sum_log_y; -public: - model_spatial(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_spatial(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_spatial_namespace::model_spatial"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(N,K)); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = matrix_d(static_cast(N),static_cast(K)); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - X(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "is_continuous", "int", context__.to_vec()); - is_continuous = int(0); - vals_i__ = context__.vals_i("is_continuous"); - pos__ = 0; - is_continuous = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_aux", "int", context__.to_vec()); - has_aux = int(0); - vals_i__ = context__.vals_i("has_aux"); - pos__ = 0; - has_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "model_type", "int", context__.to_vec()); - model_type = int(0); - vals_i__ = context__.vals_i("model_type"); - pos__ = 0; - model_type = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("trials", "(logical_eq(family,4) ? N : 0 )", (logical_eq(family,4) ? N : 0 )); - context__.validate_dims("data initialization", "trials", "int", context__.to_vec((logical_eq(family,4) ? N : 0 ))); - validate_non_negative_index("trials", "(logical_eq(family,4) ? N : 0 )", (logical_eq(family,4) ? N : 0 )); - trials = std::vector((logical_eq(family,4) ? N : 0 ),int(0)); - vals_i__ = context__.vals_i("trials"); - pos__ = 0; - size_t trials_limit_0__ = (logical_eq(family,4) ? N : 0 ); - for (size_t i_0__ = 0; i_0__ < trials_limit_0__; ++i_0__) { - trials[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y_int", "(logical_eq(is_continuous,1) ? 0 : N )", (logical_eq(is_continuous,1) ? 0 : N )); - context__.validate_dims("data initialization", "y_int", "int", context__.to_vec((logical_eq(is_continuous,1) ? 0 : N ))); - validate_non_negative_index("y_int", "(logical_eq(is_continuous,1) ? 0 : N )", (logical_eq(is_continuous,1) ? 0 : N )); - y_int = std::vector((logical_eq(is_continuous,1) ? 0 : N ),int(0)); - vals_i__ = context__.vals_i("y_int"); - pos__ = 0; - size_t y_int_limit_0__ = (logical_eq(is_continuous,1) ? 0 : N ); - for (size_t i_0__ = 0; i_0__ < y_int_limit_0__; ++i_0__) { - y_int[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y_real", "(logical_eq(is_continuous,1) ? N : 0 )", (logical_eq(is_continuous,1) ? N : 0 )); - context__.validate_dims("data initialization", "y_real", "vector_d", context__.to_vec((logical_eq(is_continuous,1) ? N : 0 ))); - validate_non_negative_index("y_real", "(logical_eq(is_continuous,1) ? N : 0 )", (logical_eq(is_continuous,1) ? N : 0 )); - y_real = vector_d(static_cast((logical_eq(is_continuous,1) ? N : 0 ))); - vals_r__ = context__.vals_r("y_real"); - pos__ = 0; - size_t y_real_i_vec_lim__ = (logical_eq(is_continuous,1) ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < y_real_i_vec_lim__; ++i_vec__) { - y_real[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "E_n", "int", context__.to_vec()); - E_n = int(0); - vals_i__ = context__.vals_i("E_n"); - pos__ = 0; - E_n = vals_i__[pos__++]; - validate_non_negative_index("edges", "E_n", E_n); - validate_non_negative_index("edges", "2", 2); - context__.validate_dims("data initialization", "edges", "int", context__.to_vec(E_n,2)); - validate_non_negative_index("edges", "E_n", E_n); - validate_non_negative_index("edges", "2", 2); - edges = std::vector >(E_n,std::vector(2,int(0))); - vals_i__ = context__.vals_i("edges"); - pos__ = 0; - size_t edges_limit_1__ = 2; - for (size_t i_1__ = 0; i_1__ < edges_limit_1__; ++i_1__) { - size_t edges_limit_0__ = E_n; - for (size_t i_0__ = 0; i_0__ < edges_limit_0__; ++i_0__) { - edges[i_0__][i_1__] = vals_i__[pos__++]; - } - } - context__.validate_dims("data initialization", "order", "int", context__.to_vec()); - order = int(0); - vals_i__ = context__.vals_i("order"); - pos__ = 0; - order = vals_i__[pos__++]; - validate_non_negative_index("Q_n", "logical_eq(order,2)", logical_eq(order,2)); - context__.validate_dims("data initialization", "Q_n", "int", context__.to_vec(logical_eq(order,2))); - validate_non_negative_index("Q_n", "logical_eq(order,2)", logical_eq(order,2)); - Q_n = std::vector(logical_eq(order,2),int(0)); - vals_i__ = context__.vals_i("Q_n"); - pos__ = 0; - size_t Q_n_limit_0__ = logical_eq(order,2); - for (size_t i_0__ = 0; i_0__ < Q_n_limit_0__; ++i_0__) { - Q_n[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("w", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ))); - validate_non_negative_index("w", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - w = vector_d(static_cast((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ))); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - context__.validate_dims("data initialization", "v", "int", context__.to_vec((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ))); - validate_non_negative_index("v", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - v = std::vector((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ),int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ); - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_eq(order,2) ? (N + 1) : 0 )", (logical_eq(order,2) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_eq(order,2) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_eq(order,2) ? (N + 1) : 0 )", (logical_eq(order,2) ? (N + 1) : 0 )); - u = std::vector((logical_eq(order,2) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_eq(order,2) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_dist_rho", "int", context__.to_vec()); - prior_dist_rho = int(0); - vals_i__ = context__.vals_i("prior_dist_rho"); - pos__ = 0; - prior_dist_rho = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_rho", "double", context__.to_vec()); - prior_mean_rho = double(0); - vals_r__ = context__.vals_r("prior_mean_rho"); - pos__ = 0; - prior_mean_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_rho", "double", context__.to_vec()); - prior_scale_rho = double(0); - vals_r__ = context__.vals_r("prior_scale_rho"); - pos__ = 0; - prior_scale_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_rho", "double", context__.to_vec()); - prior_df_rho = double(0); - vals_r__ = context__.vals_r("prior_df_rho"); - pos__ = 0; - prior_df_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "shape1_rho", "double", context__.to_vec()); - shape1_rho = double(0); - vals_r__ = context__.vals_r("shape1_rho"); - pos__ = 0; - shape1_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "shape2_rho", "double", context__.to_vec()); - shape2_rho = double(0); - vals_r__ = context__.vals_r("shape2_rho"); - pos__ = 0; - shape2_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "scaling_factor", "double", context__.to_vec()); - scaling_factor = double(0); - vals_r__ = context__.vals_r("scaling_factor"); - pos__ = 0; - scaling_factor = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_tau", "int", context__.to_vec()); - prior_dist_tau = int(0); - vals_i__ = context__.vals_i("prior_dist_tau"); - pos__ = 0; - prior_dist_tau = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_tau", "double", context__.to_vec()); - prior_mean_tau = double(0); - vals_r__ = context__.vals_r("prior_mean_tau"); - pos__ = 0; - prior_mean_tau = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_tau", "double", context__.to_vec()); - prior_scale_tau = double(0); - vals_r__ = context__.vals_r("prior_scale_tau"); - pos__ = 0; - prior_scale_tau = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_tau", "double", context__.to_vec()); - prior_df_tau = double(0); - vals_r__ = context__.vals_r("prior_df_tau"); - pos__ = 0; - prior_df_tau = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"family",family,1); - check_less_or_equal(function__,"family",family,5); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"has_aux",has_aux,0); - check_less_or_equal(function__,"has_aux",has_aux,1); - check_greater_or_equal(function__,"model_type",model_type,1); - check_less_or_equal(function__,"model_type",model_type,3); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - for (int k0__ = 0; k0__ < (logical_eq(family,4) ? N : 0 ); ++k0__) { - check_greater_or_equal(function__,"trials[k0__]",trials[k0__],0); - } - check_greater_or_equal(function__,"order",order,1); - check_less_or_equal(function__,"order",order,2); - for (int k0__ = 0; k0__ < logical_eq(order,2); ++k0__) { - check_greater_or_equal(function__,"Q_n[k0__]",Q_n[k0__],0); - } - check_greater_or_equal(function__,"prior_dist_rho",prior_dist_rho,0); - check_less_or_equal(function__,"prior_dist_rho",prior_dist_rho,1); - check_greater_or_equal(function__,"prior_scale_rho",prior_scale_rho,0); - check_greater_or_equal(function__,"prior_df_rho",prior_df_rho,0); - check_greater_or_equal(function__,"shape1_rho",shape1_rho,0); - check_greater_or_equal(function__,"shape2_rho",shape2_rho,0); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_greater_or_equal(function__,"prior_dist_tau",prior_dist_tau,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_scale_tau",prior_scale_tau,0); - check_greater_or_equal(function__,"prior_df_tau",prior_df_tau,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - // initialize data variables - poisson_max = double(0); - stan::math::fill(poisson_max,DUMMY_VAR__); - stan::math::assign(poisson_max,pow(2.0,30.0)); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - sum_log_y = double(0); - stan::math::fill(sum_log_y,DUMMY_VAR__); - stan::math::assign(sum_log_y,(logical_eq(family,1) ? stan::math::not_a_number() : sum(log(y_real)) )); - - try { - if (as_bool(logical_lte(prior_dist,2))) { - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - stan::math::assign(hs, 4); - } else { - stan::math::assign(hs, 0); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "K", K); - num_params_r__ += K; - validate_non_negative_index("theta_raw", "(logical_eq(model_type,1) ? 0 : N )", (logical_eq(model_type,1) ? 0 : N )); - num_params_r__ += (logical_eq(model_type,1) ? 0 : N ); - validate_non_negative_index("phi_raw", "(N - 1)", (N - 1)); - num_params_r__ += (N - 1); - validate_non_negative_index("rho", "logical_neq(model_type,1)", logical_neq(model_type,1)); - num_params_r__ += logical_neq(model_type,1); - ++num_params_r__; - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("aux_unscaled", "has_aux", has_aux); - num_params_r__ += has_aux; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - } - - ~model_spatial() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_lub_unconstrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "K", K); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec(K)); - // generate_declaration z_beta - vector_d z_beta(static_cast(K)); - for (int j1__ = 0U; j1__ < K; ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("theta_raw"))) - throw std::runtime_error("variable theta_raw missing"); - vals_r__ = context__.vals_r("theta_raw"); - pos__ = 0U; - validate_non_negative_index("theta_raw", "(logical_eq(model_type,1) ? 0 : N )", (logical_eq(model_type,1) ? 0 : N )); - context__.validate_dims("initialization", "theta_raw", "vector_d", context__.to_vec((logical_eq(model_type,1) ? 0 : N ))); - // generate_declaration theta_raw - vector_d theta_raw(static_cast((logical_eq(model_type,1) ? 0 : N ))); - for (int j1__ = 0U; j1__ < (logical_eq(model_type,1) ? 0 : N ); ++j1__) - theta_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(theta_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable theta_raw: ") + e.what()); - } - - if (!(context__.contains_r("phi_raw"))) - throw std::runtime_error("variable phi_raw missing"); - vals_r__ = context__.vals_r("phi_raw"); - pos__ = 0U; - validate_non_negative_index("phi_raw", "(N - 1)", (N - 1)); - context__.validate_dims("initialization", "phi_raw", "vector_d", context__.to_vec((N - 1))); - // generate_declaration phi_raw - vector_d phi_raw(static_cast((N - 1))); - for (int j1__ = 0U; j1__ < (N - 1); ++j1__) - phi_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(phi_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable phi_raw: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "logical_neq(model_type,1)", logical_neq(model_type,1)); - context__.validate_dims("initialization", "rho", "double", context__.to_vec(logical_neq(model_type,1))); - // generate_declaration rho - std::vector rho(logical_neq(model_type,1),double(0)); - for (int i0__ = 0U; i0__ < logical_neq(model_type,1); ++i0__) - rho[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_neq(model_type,1); ++i0__) - try { - writer__.scalar_lub_unconstrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ),rho[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - context__.validate_dims("initialization", "tau", "double", context__.to_vec()); - // generate_declaration tau - double tau(0); - tau = vals_r__[pos__++]; - try { - writer__.scalar_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("aux_unscaled"))) - throw std::runtime_error("variable aux_unscaled missing"); - vals_r__ = context__.vals_r("aux_unscaled"); - pos__ = 0U; - validate_non_negative_index("aux_unscaled", "has_aux", has_aux); - context__.validate_dims("initialization", "aux_unscaled", "double", context__.to_vec(has_aux)); - // generate_declaration aux_unscaled - std::vector aux_unscaled(has_aux,double(0)); - for (int i0__ = 0U; i0__ < has_aux; ++i0__) - aux_unscaled[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_aux; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,aux_unscaled[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable aux_unscaled: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),lp__)); - else - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain(K,lp__); - else - z_beta = in__.vector_constrain(K); - - Eigen::Matrix theta_raw; - (void) theta_raw; // dummy to suppress unused var warning - if (jacobian__) - theta_raw = in__.vector_constrain((logical_eq(model_type,1) ? 0 : N ),lp__); - else - theta_raw = in__.vector_constrain((logical_eq(model_type,1) ? 0 : N )); - - Eigen::Matrix phi_raw; - (void) phi_raw; // dummy to suppress unused var warning - if (jacobian__) - phi_raw = in__.vector_constrain((N - 1),lp__); - else - phi_raw = in__.vector_constrain((N - 1)); - - vector rho; - size_t dim_rho_0__ = logical_neq(model_type,1); - rho.reserve(dim_rho_0__); - for (size_t k_0__ = 0; k_0__ < dim_rho_0__; ++k_0__) { - if (jacobian__) - rho.push_back(in__.scalar_lub_constrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ),lp__)); - else - rho.push_back(in__.scalar_lub_constrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ))); - } - - T__ tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.scalar_lb_constrain(0,lp__); - else - tau = in__.scalar_lb_constrain(0); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = has_aux; - aux_unscaled.reserve(dim_aux_unscaled_0__); - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - if (jacobian__) - aux_unscaled.push_back(in__.scalar_lb_constrain(0,lp__)); - else - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - T__ aux; - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, DUMMY_VAR__); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(has_aux,0) ? stan::math::promote_scalar(0) : stan::math::promote_scalar((logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(get_base1(aux_unscaled,1,"aux_unscaled",1)) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1)) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))) )) )) )); - validate_non_negative_index("phi", "N", N); - Eigen::Matrix phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, DUMMY_VAR__); - stan::math::fill(phi,DUMMY_VAR__); - validate_non_negative_index("psi", "N", N); - Eigen::Matrix psi(static_cast(N)); - (void) psi; // dummy to suppress unused var warning - - stan::math::initialize(psi, DUMMY_VAR__); - stan::math::fill(psi,DUMMY_VAR__); - - - try { - stan::model::assign(phi, - stan::model::cons_list(stan::model::index_min_max(1, (N - 1)), stan::model::nil_index_list()), - phi_raw, - "assigning variable phi"); - stan::math::assign(get_base1_lhs(phi,N,"phi",1), -(sum(phi_raw))); - if (as_bool(logical_eq(model_type,1))) { - stan::math::assign(psi, multiply(phi,tau)); - } else if (as_bool(logical_eq(model_type,2))) { - stan::math::assign(psi, add(multiply(phi,get_base1(rho,1,"rho",1)),multiply(theta_raw,tau))); - } else if (as_bool(logical_eq(model_type,3))) { - stan::math::assign(psi, multiply(tau,add(multiply(sqrt((1 - get_base1(rho,1,"rho",1))),theta_raw),multiply(sqrt((get_base1(rho,1,"rho",1) / scaling_factor)),phi)))); - } - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - if (stan::math::is_uninitialized(aux)) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: aux"; - throw std::runtime_error(msg__.str()); - } - for (int i0__ = 0; i0__ < N; ++i0__) { - if (stan::math::is_uninitialized(phi(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: phi" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < N; ++i0__) { - if (stan::math::is_uninitialized(psi(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: psi" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_eq(has_intercept,1))) { - stan::math::assign(eta, add(add(get_base1(gamma,1,"gamma",1),multiply(X,beta)),psi)); - } else { - stan::math::assign(eta, add(multiply(X,beta),psi)); - } - if (as_bool(logical_eq(family,1))) { - - stan::math::assign(eta, linkinv_gauss(eta,link, pstream__)); - lp_accum__.add(normal_log(y_real,eta,aux)); - } else if (as_bool(logical_eq(family,2))) { - - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - lp_accum__.add(poisson_log(y_int,eta)); - } else if (as_bool(logical_eq(family,3))) { - - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - lp_accum__.add(neg_binomial_2_log(y_int,eta,aux)); - } else if (as_bool(logical_eq(family,4))) { - - stan::math::assign(eta, linkinv_binom(eta,link, pstream__)); - lp_accum__.add(binomial_log(y_int,trials,eta)); - } else if (as_bool(logical_eq(family,5))) { - - lp_accum__.add(GammaReg(y_real,eta,aux,link,sum_log_y, pstream__)); - } - if (as_bool(logical_eq(order,1))) { - lp_accum__.add((-(0.5) * dot_self(subtract(stan::model::rvalue(phi, stan::model::cons_list(stan::model::index_multi(stan::model::rvalue(edges, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "edges")), stan::model::nil_index_list()), "phi"),stan::model::rvalue(phi, stan::model::cons_list(stan::model::index_multi(stan::model::rvalue(edges, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "edges")), stan::model::nil_index_list()), "phi"))))); - } else if (as_bool(logical_eq(order,2))) { - lp_accum__.add((-(0.5) * dot_product(phi,csr_matrix_times_vector(N,N,w,v,u,phi)))); - } - if (as_bool(logical_eq(prior_dist,1))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - lp_accum__.add(normal_log(z_beta,0,1)); - } - if (as_bool(logical_eq(has_intercept,1))) { - - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - if (as_bool(logical_eq(model_type,2))) { - - lp_accum__.add(normal_log(theta_raw,0,1)); - if (as_bool(logical_eq(prior_dist_rho,1))) { - lp_accum__.add(normal_log(get_base1(rho,1,"rho",1),prior_mean_rho,prior_scale_rho)); - } else if (as_bool(logical_eq(prior_dist_rho,2))) { - lp_accum__.add(student_t_log(get_base1(rho,1,"rho",1),prior_df_rho,prior_mean_rho,prior_scale_rho)); - } else if (as_bool(logical_eq(prior_dist_rho,3))) { - lp_accum__.add(exponential_log(get_base1(rho,1,"rho",1),prior_scale_rho)); - } - } else if (as_bool(logical_eq(model_type,3))) { - - lp_accum__.add(normal_log(theta_raw,0,1)); - if (as_bool(logical_eq(prior_dist_rho,1))) { - lp_accum__.add(beta_log(get_base1(rho,1,"rho",1),shape1_rho,shape2_rho)); - } - } - if (as_bool(logical_eq(prior_dist_tau,1))) { - lp_accum__.add(normal_log(tau,prior_mean_tau,prior_scale_tau)); - } else if (as_bool(logical_eq(prior_dist_tau,2))) { - lp_accum__.add(student_t_log(tau,prior_df_tau,prior_mean_tau,prior_scale_tau)); - } else if (as_bool(logical_eq(prior_dist_tau,3))) { - lp_accum__.add(exponential_log(tau,prior_scale_tau)); - } - if (as_bool(logical_eq(has_aux,1))) { - - if (as_bool((primitive_value(logical_gt(prior_dist_for_aux,0)) && primitive_value(logical_gt(prior_scale_for_aux,0))))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - if (as_bool(logical_eq(prior_dist_for_aux,1))) { - lp_accum__.add((normal_log(aux_unscaled,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_aux,2))) { - lp_accum__.add((student_t_log(aux_unscaled,prior_df_for_aux,0,1) - log_half)); - } else { - lp_accum__.add(exponential_log(aux_unscaled,1)); - } - } - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("theta_raw"); - names__.push_back("phi_raw"); - names__.push_back("rho"); - names__.push_back("tau"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("aux_unscaled"); - names__.push_back("one_over_lambda"); - names__.push_back("beta"); - names__.push_back("aux"); - names__.push_back("phi"); - names__.push_back("psi"); - names__.push_back("mean_PPD"); - names__.push_back("alpha"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(model_type,1) ? 0 : N )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((N - 1)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_neq(model_type,1)); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_aux); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(N); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(N); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_spatial_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - vector_d z_beta = in__.vector_constrain(K); - vector_d theta_raw = in__.vector_constrain((logical_eq(model_type,1) ? 0 : N )); - vector_d phi_raw = in__.vector_constrain((N - 1)); - vector rho; - size_t dim_rho_0__ = logical_neq(model_type,1); - for (size_t k_0__ = 0; k_0__ < dim_rho_0__; ++k_0__) { - rho.push_back(in__.scalar_lub_constrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ))); - } - double tau = in__.scalar_lb_constrain(0); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = has_aux; - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(model_type,1) ? 0 : N ); ++k_0__) { - vars__.push_back(theta_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < (N - 1); ++k_0__) { - vars__.push_back(phi_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < logical_neq(model_type,1); ++k_0__) { - vars__.push_back(rho[k_0__]); - } - vars__.push_back(tau); - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < has_aux; ++k_0__) { - vars__.push_back(aux_unscaled[k_0__]); - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - double aux(0.0); - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(has_aux,0) ? stan::math::promote_scalar(0) : stan::math::promote_scalar((logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(get_base1(aux_unscaled,1,"aux_unscaled",1)) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1)) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))) )) )) )); - validate_non_negative_index("phi", "N", N); - vector_d phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, std::numeric_limits::quiet_NaN()); - stan::math::fill(phi,DUMMY_VAR__); - validate_non_negative_index("psi", "N", N); - vector_d psi(static_cast(N)); - (void) psi; // dummy to suppress unused var warning - - stan::math::initialize(psi, std::numeric_limits::quiet_NaN()); - stan::math::fill(psi,DUMMY_VAR__); - - - try { - stan::model::assign(phi, - stan::model::cons_list(stan::model::index_min_max(1, (N - 1)), stan::model::nil_index_list()), - phi_raw, - "assigning variable phi"); - stan::math::assign(get_base1_lhs(phi,N,"phi",1), -(sum(phi_raw))); - if (as_bool(logical_eq(model_type,1))) { - stan::math::assign(psi, multiply(phi,tau)); - } else if (as_bool(logical_eq(model_type,2))) { - stan::math::assign(psi, add(multiply(phi,get_base1(rho,1,"rho",1)),multiply(theta_raw,tau))); - } else if (as_bool(logical_eq(model_type,3))) { - stan::math::assign(psi, multiply(tau,add(multiply(sqrt((1 - get_base1(rho,1,"rho",1))),theta_raw),multiply(sqrt((get_base1(rho,1,"rho",1) / scaling_factor)),phi)))); - } - if (as_bool(logical_eq(prior_dist,0))) { - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - for (int k = 1; k <= K; ++k) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - stan::math::assign(z_pos, (z_pos + 1)); - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - stan::math::assign(z_pos, (z_pos + 1)); - } - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - vars__.push_back(aux); - for (int k_0__ = 0; k_0__ < N; ++k_0__) { - vars__.push_back(phi[k_0__]); - } - for (int k_0__ = 0; k_0__ < N; ++k_0__) { - vars__.push_back(psi[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - - - try { - if (as_bool(has_intercept)) { - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(beta,xbar))); - } - { - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - if (as_bool(logical_eq(has_intercept,1))) { - - stan::math::assign(eta, add(add(get_base1(alpha,1,"alpha",1),multiply(X,beta)),psi)); - } else { - - stan::math::assign(eta, add(multiply(X,beta),psi)); - } - if (as_bool(logical_eq(family,1))) { - - stan::math::assign(eta, linkinv_gauss(eta,link, pstream__)); - for (int n = 1; n <= N; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta,n,"eta",1),aux, base_rng__))); - } - } else if (as_bool(logical_eq(family,2))) { - - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - for (int n = 1; n <= N; ++n) { - - if (as_bool(logical_lt(get_base1(eta,n,"eta",1),poisson_max))) { - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(get_base1(eta,n,"eta",1), base_rng__))); - } else { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta,n,"eta",1),sqrt(get_base1(eta,n,"eta",1)), base_rng__))); - } - } - } else if (as_bool(logical_eq(family,3))) { - - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - for (int n = 1; n <= N; ++n) { - { - double gamma_temp(0.0); - (void) gamma_temp; // dummy to suppress unused var warning - - stan::math::initialize(gamma_temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(gamma_temp,DUMMY_VAR__); - - - if (as_bool(is_inf(aux))) { - stan::math::assign(gamma_temp, get_base1(eta,n,"eta",1)); - } else { - stan::math::assign(gamma_temp, gamma_rng(aux,(aux / get_base1(eta,n,"eta",1)), base_rng__)); - } - if (as_bool(logical_lt(gamma_temp,poisson_max))) { - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(gamma_temp, base_rng__))); - } else { - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(gamma_temp,sqrt(gamma_temp), base_rng__))); - } - } - } - } else if (as_bool(logical_eq(family,4))) { - - stan::math::assign(eta, linkinv_binom(eta,link, pstream__)); - for (int n = 1; n <= N; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + binomial_rng(get_base1(trials,n,"trials",1),inv_logit(get_base1(eta,n,"eta",1)), base_rng__))); - } - } else if (as_bool(logical_eq(family,5))) { - - if (as_bool(logical_gt(link,1))) { - stan::math::assign(eta, linkinv_gamma(eta,link, pstream__)); - } - for (int n = 1; n <= N; ++n) { - stan::math::assign(mean_PPD, (mean_PPD + gamma_rng(aux,(aux / get_base1(eta,n,"eta",1)), base_rng__))); - } - } - } - stan::math::assign(mean_PPD, (mean_PPD / N)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - vars__.push_back(mean_PPD); - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_spatial"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(model_type,1) ? 0 : N ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (N - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_neq(model_type,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "tau"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= has_aux; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "psi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(model_type,1) ? 0 : N ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (N - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_neq(model_type,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "tau"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= has_aux; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "psi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - -}; // model - -} - - - - -#endif diff --git a/src/include/models.hpp.bak b/src/include/models.hpp.bak deleted file mode 100644 index e9e431753..000000000 --- a/src/include/models.hpp.bak +++ /dev/null @@ -1,22874 +0,0 @@ -/* - rstanarm is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - rstanarm is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with rstanarm. If not, see . -*/ -#ifndef MODELS_HPP -#define MODELS_HPP -#define STAN__SERVICES__COMMAND_HPP -#include -// Code generated by Stan version 2.16.0 - -#include - -namespace model_bernoulli_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_bernoulli"); - reader.add_event(760, 760, "end", "model_bernoulli"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 52; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 54; - if (as_bool(logical_eq(nc,1))) { - - current_statement_begin__ = 55; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - current_statement_begin__ = 57; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - current_statement_begin__ = 65; - stan::math::assign(pi, divide(pi,sum(pi))); - current_statement_begin__ = 68; - stan::math::assign(zeta_mark, (zeta_mark + nc)); - current_statement_begin__ = 69; - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - current_statement_begin__ = 70; - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - current_statement_begin__ = 73; - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - current_statement_begin__ = 74; - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - current_statement_begin__ = 75; - stan::math::assign(rho_mark, (rho_mark + 1)); - current_statement_begin__ = 76; - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - current_statement_begin__ = 77; - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - current_statement_begin__ = 79; - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - current_statement_begin__ = 83; - stan::math::assign(z_T_mark, (z_T_mark + r)); - current_statement_begin__ = 84; - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - current_statement_begin__ = 85; - for (int c = 1; c <= r; ++c) { - current_statement_begin__ = 85; - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - current_statement_begin__ = 86; - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - current_statement_begin__ = 87; - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - current_statement_begin__ = 91; - for (int c = 1; c <= nc; ++c) { - current_statement_begin__ = 91; - for (int r = c; r <= nc; ++r) { - - current_statement_begin__ = 92; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - current_statement_begin__ = 93; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - current_statement_begin__ = 97; - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 115; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 117; - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - current_statement_begin__ = 119; - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - current_statement_begin__ = 120; - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - current_statement_begin__ = 121; - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - current_statement_begin__ = 122; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - current_statement_begin__ = 126; - for (int c = 1; c <= nc; ++c) { - - current_statement_begin__ = 127; - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 128; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - current_statement_begin__ = 129; - for (int r = (c + 1); r <= nc; ++r) { - - current_statement_begin__ = 130; - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 131; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - current_statement_begin__ = 134; - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - current_statement_begin__ = 136; - stan::math::assign(b_mark, (b_mark - 1)); - current_statement_begin__ = 137; - for (int s = 1; s <= nc; ++s) { - current_statement_begin__ = 137; - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - current_statement_begin__ = 138; - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - current_statement_begin__ = 142; - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - current_statement_begin__ = 165; - lp_accum__.add(normal_log(z_b,0,1)); - current_statement_begin__ = 166; - lp_accum__.add(normal_log(z_T,0,1)); - current_statement_begin__ = 167; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 167; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - current_statement_begin__ = 171; - stan::math::assign(pos_reg, (pos_reg + 1)); - current_statement_begin__ = 172; - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - current_statement_begin__ = 173; - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - current_statement_begin__ = 174; - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - current_statement_begin__ = 175; - stan::math::assign(nu, (nu - 0.5)); - current_statement_begin__ = 176; - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - current_statement_begin__ = 177; - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - current_statement_begin__ = 179; - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - current_statement_begin__ = 180; - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - current_statement_begin__ = 182; - lp_accum__.add(gamma_log(zeta,delta,1)); - current_statement_begin__ = 183; - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - current_statement_begin__ = 200; - stan::math::assign(K, rows(z_beta)); - current_statement_begin__ = 201; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 201; - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - current_statement_begin__ = 202; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 218; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - current_statement_begin__ = 233; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 233; - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - current_statement_begin__ = 234; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - current_statement_begin__ = 256; - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - current_statement_begin__ = 271; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 271; - for (int j = 1; j <= N; ++j) { - current_statement_begin__ = 271; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 272; - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - current_statement_begin__ = 273; - stan::math::assign(pos, (pos + 1)); - } - } - } - current_statement_begin__ = 275; - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_bern(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 288; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 288; - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 289; - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 290; - return stan::math::promote_scalar(add(divide(atan(eta),stan::math::pi()),0.5)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 291; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 292; - return stan::math::promote_scalar(inv_cloglog(eta)); - } else { - current_statement_begin__ = 293; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 293; - current_statement_begin__ = 294; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_bern_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_bern(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -ll_bern_lp(const Eigen::Matrix& eta0, - const Eigen::Matrix& eta1, - const int& link, - const std::vector& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 307; - if (as_bool(logical_eq(link,1))) { - - current_statement_begin__ = 308; - lp_accum__.add(logistic_ccdf_log(eta0,0,1)); - current_statement_begin__ = 309; - lp_accum__.add(logistic_cdf_log(eta1,0,1)); - } else if (as_bool(logical_eq(link,2))) { - - current_statement_begin__ = 312; - lp_accum__.add(normal_ccdf_log(eta0,0,1)); - current_statement_begin__ = 313; - lp_accum__.add(normal_cdf_log(eta1,0,1)); - } else if (as_bool(logical_eq(link,3))) { - - current_statement_begin__ = 316; - lp_accum__.add(cauchy_ccdf_log(eta0,0,1)); - current_statement_begin__ = 317; - lp_accum__.add(cauchy_cdf_log(eta1,0,1)); - } else if (as_bool(logical_eq(link,4))) { - - current_statement_begin__ = 320; - lp_accum__.add(log1m_exp(eta0)); - current_statement_begin__ = 321; - lp_accum__.add(eta1); - } else if (as_bool(logical_eq(link,5))) { - - current_statement_begin__ = 324; - lp_accum__.add(log1m_exp(minus(exp(eta1)))); - current_statement_begin__ = 325; - lp_accum__.add(minus(exp(eta0))); - } else { - current_statement_begin__ = 327; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 327; - current_statement_begin__ = 328; - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_bern_lp_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const Eigen::Matrix& eta0, - const Eigen::Matrix& eta1, - const int& link, - const std::vector& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_bern_lp(eta0, eta1, link, N, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_bern(const int& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 343; - if (as_bool(logical_eq(link,1))) { - - current_statement_begin__ = 344; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 344; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), bernoulli_logit_log(y,get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,5))) { - { - validate_non_negative_index("pi", "N", N); - Eigen::Matrix pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,linkinv_bern(eta,link, pstream__)); - - - current_statement_begin__ = 348; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 348; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), bernoulli_log(y,get_base1(pi,n,"pi",1))); - } - } - } else { - current_statement_begin__ = 350; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 350; - current_statement_begin__ = 351; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_bern_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const int& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_bern(y, eta, link, pstream__); - } -}; - -class model_bernoulli : public prob_grad { -private: - int K; - vector N; - vector_d xbar; - int dense_X; - vector X0; - vector X1; - int nnz_X0; - vector_d w_X0; - vector v_X0; - vector u_X0; - int nnz_X1; - vector_d w_X1; - vector v_X1; - vector u_X1; - int K_smooth; - matrix_d S0; - matrix_d S1; - vector smooth_map; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights0; - vector_d weights1; - int has_offset; - vector_d offset0; - vector_d offset1; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - vector num_non_zero; - vector_d w0; - vector_d w1; - vector v0; - vector v1; - vector u0; - vector u1; - int special_case; - int NN; - double aux; - vector > V0; - vector > V1; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_bernoulli(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_bernoulli(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_bernoulli_namespace::model_bernoulli"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("N", "2", 2); - context__.validate_dims("data initialization", "N", "int", context__.to_vec(2)); - validate_non_negative_index("N", "2", 2); - N = std::vector(2,int(0)); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - size_t N_limit_0__ = 2; - for (size_t i_0__ = 0; i_0__ < N_limit_0__; ++i_0__) { - N[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X0", "dense_X", dense_X); - validate_non_negative_index("X0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("X0", "K", K); - context__.validate_dims("data initialization", "X0", "matrix_d", context__.to_vec(dense_X,get_base1(N,1,"N",1),K)); - validate_non_negative_index("X0", "dense_X", dense_X); - validate_non_negative_index("X0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("X0", "K", K); - X0 = std::vector(dense_X,matrix_d(static_cast(get_base1(N,1,"N",1)),static_cast(K))); - vals_r__ = context__.vals_r("X0"); - pos__ = 0; - size_t X0_m_mat_lim__ = get_base1(N,1,"N",1); - size_t X0_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X0_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X0_m_mat_lim__; ++m_mat__) { - size_t X0_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X0_limit_0__; ++i_0__) { - X0[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - validate_non_negative_index("X1", "dense_X", dense_X); - validate_non_negative_index("X1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("X1", "K", K); - context__.validate_dims("data initialization", "X1", "matrix_d", context__.to_vec(dense_X,get_base1(N,2,"N",1),K)); - validate_non_negative_index("X1", "dense_X", dense_X); - validate_non_negative_index("X1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("X1", "K", K); - X1 = std::vector(dense_X,matrix_d(static_cast(get_base1(N,2,"N",1)),static_cast(K))); - vals_r__ = context__.vals_r("X1"); - pos__ = 0; - size_t X1_m_mat_lim__ = get_base1(N,2,"N",1); - size_t X1_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X1_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X1_m_mat_lim__; ++m_mat__) { - size_t X1_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X1_limit_0__; ++i_0__) { - X1[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X0", "int", context__.to_vec()); - nnz_X0 = int(0); - vals_i__ = context__.vals_i("nnz_X0"); - pos__ = 0; - nnz_X0 = vals_i__[pos__++]; - validate_non_negative_index("w_X0", "nnz_X0", nnz_X0); - context__.validate_dims("data initialization", "w_X0", "vector_d", context__.to_vec(nnz_X0)); - validate_non_negative_index("w_X0", "nnz_X0", nnz_X0); - w_X0 = vector_d(static_cast(nnz_X0)); - vals_r__ = context__.vals_r("w_X0"); - pos__ = 0; - size_t w_X0_i_vec_lim__ = nnz_X0; - for (size_t i_vec__ = 0; i_vec__ < w_X0_i_vec_lim__; ++i_vec__) { - w_X0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X0", "nnz_X0", nnz_X0); - context__.validate_dims("data initialization", "v_X0", "int", context__.to_vec(nnz_X0)); - validate_non_negative_index("v_X0", "nnz_X0", nnz_X0); - v_X0 = std::vector(nnz_X0,int(0)); - vals_i__ = context__.vals_i("v_X0"); - pos__ = 0; - size_t v_X0_limit_0__ = nnz_X0; - for (size_t i_0__ = 0; i_0__ < v_X0_limit_0__; ++i_0__) { - v_X0[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X0", "(dense_X ? 0 : (get_base1(N,1,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) )); - context__.validate_dims("data initialization", "u_X0", "int", context__.to_vec((dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ))); - validate_non_negative_index("u_X0", "(dense_X ? 0 : (get_base1(N,1,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) )); - u_X0 = std::vector((dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X0"); - pos__ = 0; - size_t u_X0_limit_0__ = (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X0_limit_0__; ++i_0__) { - u_X0[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "nnz_X1", "int", context__.to_vec()); - nnz_X1 = int(0); - vals_i__ = context__.vals_i("nnz_X1"); - pos__ = 0; - nnz_X1 = vals_i__[pos__++]; - validate_non_negative_index("w_X1", "nnz_X1", nnz_X1); - context__.validate_dims("data initialization", "w_X1", "vector_d", context__.to_vec(nnz_X1)); - validate_non_negative_index("w_X1", "nnz_X1", nnz_X1); - w_X1 = vector_d(static_cast(nnz_X1)); - vals_r__ = context__.vals_r("w_X1"); - pos__ = 0; - size_t w_X1_i_vec_lim__ = nnz_X1; - for (size_t i_vec__ = 0; i_vec__ < w_X1_i_vec_lim__; ++i_vec__) { - w_X1[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X1", "nnz_X1", nnz_X1); - context__.validate_dims("data initialization", "v_X1", "int", context__.to_vec(nnz_X1)); - validate_non_negative_index("v_X1", "nnz_X1", nnz_X1); - v_X1 = std::vector(nnz_X1,int(0)); - vals_i__ = context__.vals_i("v_X1"); - pos__ = 0; - size_t v_X1_limit_0__ = nnz_X1; - for (size_t i_0__ = 0; i_0__ < v_X1_limit_0__; ++i_0__) { - v_X1[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X1", "(dense_X ? 0 : (get_base1(N,2,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) )); - context__.validate_dims("data initialization", "u_X1", "int", context__.to_vec((dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ))); - validate_non_negative_index("u_X1", "(dense_X ? 0 : (get_base1(N,2,\"N\",1) + 1) )", (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) )); - u_X1 = std::vector((dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X1"); - pos__ = 0; - size_t u_X1_limit_0__ = (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X1_limit_0__; ++i_0__) { - u_X1[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("S0", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S0", "matrix_d", context__.to_vec(get_base1(N,1,"N",1),K_smooth)); - validate_non_negative_index("S0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - validate_non_negative_index("S0", "K_smooth", K_smooth); - S0 = matrix_d(static_cast(get_base1(N,1,"N",1)),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S0"); - pos__ = 0; - size_t S0_m_mat_lim__ = get_base1(N,1,"N",1); - size_t S0_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S0_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S0_m_mat_lim__; ++m_mat__) { - S0(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("S1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("S1", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S1", "matrix_d", context__.to_vec(get_base1(N,2,"N",1),K_smooth)); - validate_non_negative_index("S1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - validate_non_negative_index("S1", "K_smooth", K_smooth); - S1 = matrix_d(static_cast(get_base1(N,2,"N",1)),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S1"); - pos__ = 0; - size_t S1_m_mat_lim__ = get_base1(N,2,"N",1); - size_t S1_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S1_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S1_m_mat_lim__; ++m_mat__) { - S1(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights0", "(has_weights ? get_base1(N,1,\"N\",1) : 0 )", (has_weights ? get_base1(N,1,"N",1) : 0 )); - context__.validate_dims("data initialization", "weights0", "vector_d", context__.to_vec((has_weights ? get_base1(N,1,"N",1) : 0 ))); - validate_non_negative_index("weights0", "(has_weights ? get_base1(N,1,\"N\",1) : 0 )", (has_weights ? get_base1(N,1,"N",1) : 0 )); - weights0 = vector_d(static_cast((has_weights ? get_base1(N,1,"N",1) : 0 ))); - vals_r__ = context__.vals_r("weights0"); - pos__ = 0; - size_t weights0_i_vec_lim__ = (has_weights ? get_base1(N,1,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights0_i_vec_lim__; ++i_vec__) { - weights0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("weights1", "(has_weights ? get_base1(N,2,\"N\",1) : 0 )", (has_weights ? get_base1(N,2,"N",1) : 0 )); - context__.validate_dims("data initialization", "weights1", "vector_d", context__.to_vec((has_weights ? get_base1(N,2,"N",1) : 0 ))); - validate_non_negative_index("weights1", "(has_weights ? get_base1(N,2,\"N\",1) : 0 )", (has_weights ? get_base1(N,2,"N",1) : 0 )); - weights1 = vector_d(static_cast((has_weights ? get_base1(N,2,"N",1) : 0 ))); - vals_r__ = context__.vals_r("weights1"); - pos__ = 0; - size_t weights1_i_vec_lim__ = (has_weights ? get_base1(N,2,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights1_i_vec_lim__; ++i_vec__) { - weights1[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset0", "(has_offset ? get_base1(N,1,\"N\",1) : 0 )", (has_offset ? get_base1(N,1,"N",1) : 0 )); - context__.validate_dims("data initialization", "offset0", "vector_d", context__.to_vec((has_offset ? get_base1(N,1,"N",1) : 0 ))); - validate_non_negative_index("offset0", "(has_offset ? get_base1(N,1,\"N\",1) : 0 )", (has_offset ? get_base1(N,1,"N",1) : 0 )); - offset0 = vector_d(static_cast((has_offset ? get_base1(N,1,"N",1) : 0 ))); - vals_r__ = context__.vals_r("offset0"); - pos__ = 0; - size_t offset0_i_vec_lim__ = (has_offset ? get_base1(N,1,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset0_i_vec_lim__; ++i_vec__) { - offset0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("offset1", "(has_offset ? get_base1(N,2,\"N\",1) : 0 )", (has_offset ? get_base1(N,2,"N",1) : 0 )); - context__.validate_dims("data initialization", "offset1", "vector_d", context__.to_vec((has_offset ? get_base1(N,2,"N",1) : 0 ))); - validate_non_negative_index("offset1", "(has_offset ? get_base1(N,2,\"N\",1) : 0 )", (has_offset ? get_base1(N,2,"N",1) : 0 )); - offset1 = vector_d(static_cast((has_offset ? get_base1(N,2,"N",1) : 0 ))); - vals_r__ = context__.vals_r("offset1"); - pos__ = 0; - size_t offset1_i_vec_lim__ = (has_offset ? get_base1(N,2,"N",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset1_i_vec_lim__; ++i_vec__) { - offset1[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - validate_non_negative_index("num_non_zero", "2", 2); - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec(2)); - validate_non_negative_index("num_non_zero", "2", 2); - num_non_zero = std::vector(2,int(0)); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - size_t num_non_zero_limit_0__ = 2; - for (size_t i_0__ = 0; i_0__ < num_non_zero_limit_0__; ++i_0__) { - num_non_zero[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("w0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - context__.validate_dims("data initialization", "w0", "vector_d", context__.to_vec(get_base1(num_non_zero,1,"num_non_zero",1))); - validate_non_negative_index("w0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - w0 = vector_d(static_cast(get_base1(num_non_zero,1,"num_non_zero",1))); - vals_r__ = context__.vals_r("w0"); - pos__ = 0; - size_t w0_i_vec_lim__ = get_base1(num_non_zero,1,"num_non_zero",1); - for (size_t i_vec__ = 0; i_vec__ < w0_i_vec_lim__; ++i_vec__) { - w0[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("w1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - context__.validate_dims("data initialization", "w1", "vector_d", context__.to_vec(get_base1(num_non_zero,2,"num_non_zero",1))); - validate_non_negative_index("w1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - w1 = vector_d(static_cast(get_base1(num_non_zero,2,"num_non_zero",1))); - vals_r__ = context__.vals_r("w1"); - pos__ = 0; - size_t w1_i_vec_lim__ = get_base1(num_non_zero,2,"num_non_zero",1); - for (size_t i_vec__ = 0; i_vec__ < w1_i_vec_lim__; ++i_vec__) { - w1[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - context__.validate_dims("data initialization", "v0", "int", context__.to_vec(get_base1(num_non_zero,1,"num_non_zero",1))); - validate_non_negative_index("v0", "get_base1(num_non_zero,1,\"num_non_zero\",1)", get_base1(num_non_zero,1,"num_non_zero",1)); - v0 = std::vector(get_base1(num_non_zero,1,"num_non_zero",1),int(0)); - vals_i__ = context__.vals_i("v0"); - pos__ = 0; - size_t v0_limit_0__ = get_base1(num_non_zero,1,"num_non_zero",1); - for (size_t i_0__ = 0; i_0__ < v0_limit_0__; ++i_0__) { - v0[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("v1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - context__.validate_dims("data initialization", "v1", "int", context__.to_vec(get_base1(num_non_zero,2,"num_non_zero",1))); - validate_non_negative_index("v1", "get_base1(num_non_zero,2,\"num_non_zero\",1)", get_base1(num_non_zero,2,"num_non_zero",1)); - v1 = std::vector(get_base1(num_non_zero,2,"num_non_zero",1),int(0)); - vals_i__ = context__.vals_i("v1"); - pos__ = 0; - size_t v1_limit_0__ = get_base1(num_non_zero,2,"num_non_zero",1); - for (size_t i_0__ = 0; i_0__ < v1_limit_0__; ++i_0__) { - v1[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u0", "(logical_gt(t,0) ? (get_base1(N,1,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 )); - context__.validate_dims("data initialization", "u0", "int", context__.to_vec((logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ))); - validate_non_negative_index("u0", "(logical_gt(t,0) ? (get_base1(N,1,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 )); - u0 = std::vector((logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u0"); - pos__ = 0; - size_t u0_limit_0__ = (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u0_limit_0__; ++i_0__) { - u0[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u1", "(logical_gt(t,0) ? (get_base1(N,2,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 )); - context__.validate_dims("data initialization", "u1", "int", context__.to_vec((logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ))); - validate_non_negative_index("u1", "(logical_gt(t,0) ? (get_base1(N,2,\"N\",1) + 1) : 0 )", (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 )); - u1 = std::vector((logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u1"); - pos__ = 0; - size_t u1_limit_0__ = (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u1_limit_0__; ++i_0__) { - u1[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"K",K,0); - for (int k0__ = 0; k0__ < 2; ++k0__) { - check_greater_or_equal(function__,"N[k0__]",N[k0__],1); - } - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X0",nnz_X0,0); - for (int k0__ = 0; k0__ < nnz_X0; ++k0__) { - check_greater_or_equal(function__,"v_X0[k0__]",v_X0[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (get_base1(N,1,"N",1) + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X0[k0__]",u_X0[k0__],0); - } - check_greater_or_equal(function__,"nnz_X1",nnz_X1,0); - for (int k0__ = 0; k0__ < nnz_X1; ++k0__) { - check_greater_or_equal(function__,"v_X1[k0__]",v_X1[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (get_base1(N,2,"N",1) + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X1[k0__]",u_X1[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - for (int k0__ = 0; k0__ < 2; ++k0__) { - check_greater_or_equal(function__,"num_non_zero[k0__]",num_non_zero[k0__],0); - } - for (int k0__ = 0; k0__ < get_base1(num_non_zero,1,"num_non_zero",1); ++k0__) { - check_greater_or_equal(function__,"v0[k0__]",v0[k0__],0); - } - for (int k0__ = 0; k0__ < get_base1(num_non_zero,2,"num_non_zero",1); ++k0__) { - check_greater_or_equal(function__,"v1[k0__]",v1[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (get_base1(N,1,"N",1) + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u0[k0__]",u0[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (get_base1(N,2,"N",1) + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u1[k0__]",u1[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - // initialize data variables - NN = int(0); - stan::math::fill(NN, std::numeric_limits::min()); - stan::math::assign(NN,(get_base1(N,1,"N",1) + get_base1(N,2,"N",1))); - aux = double(0); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::not_a_number()); - validate_non_negative_index("V0", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - V0 = std::vector >((special_case ? t : 0 ),std::vector(get_base1(N,1,"N",1),int(0))); - stan::math::fill(V0, std::numeric_limits::min()); - stan::math::assign(V0,make_V(get_base1(N,1,"N",1),(special_case ? t : 0 ),v0, pstream__)); - validate_non_negative_index("V1", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - V1 = std::vector >((special_case ? t : 0 ),std::vector(get_base1(N,2,"N",1),int(0))); - stan::math::fill(V1, std::numeric_limits::min()); - stan::math::assign(V1,make_V(get_base1(N,2,"N",1),(special_case ? t : 0 ),v1, pstream__)); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - current_statement_begin__ = 471; - if (as_bool(logical_lte(prior_dist,2))) { - current_statement_begin__ = 471; - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - current_statement_begin__ = 472; - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - current_statement_begin__ = 473; - stan::math::assign(hs, 4); - } else { - current_statement_begin__ = 474; - stan::math::assign(hs, 0); - } - current_statement_begin__ = 476; - stan::math::assign(pos, 1); - current_statement_begin__ = 477; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 478; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - current_statement_begin__ = 479; - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - current_statement_begin__ = 480; - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - current_statement_begin__ = 481; - stan::math::assign(pos, (pos + 1)); - } - } - current_statement_begin__ = 484; - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - current_statement_begin__ = 484; - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < get_base1(N,1,"N",1); ++k1__) { - check_greater_or_equal(function__,"V0[k0__][k1__]",V0[k0__][k1__],1); - } - } - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < get_base1(N,2,"N",1); ++k1__) { - check_greater_or_equal(function__,"V1[k0__][k1__]",V1[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - } - - ~model_bernoulli() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_ub_unconstrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),lp__)); - else - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 512; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 512; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 513; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 514; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 515; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 518; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 519; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 520; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 523; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 524; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 525; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 528; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 530; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 533; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 534; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 535; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 536; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 537; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 538; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 540; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 544; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 545; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 546; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 546; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 547; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 549; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 550; - if (as_bool(special_case)) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 552; - stan::math::assign(theta_L, elt_multiply(scale,tau)); - current_statement_begin__ = 553; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 553; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 554; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 556; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 557; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 561; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - current_statement_begin__ = 563; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - Eigen::Matrix eta0(static_cast(get_base1(N,1,"N",1))); - (void) eta0; // dummy to suppress unused var warning - - stan::math::initialize(eta0, DUMMY_VAR__); - stan::math::fill(eta0,DUMMY_VAR__); - validate_non_negative_index("eta1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - Eigen::Matrix eta1(static_cast(get_base1(N,2,"N",1))); - (void) eta1; // dummy to suppress unused var warning - - stan::math::initialize(eta1, DUMMY_VAR__); - stan::math::fill(eta1,DUMMY_VAR__); - - - current_statement_begin__ = 571; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 572; - if (as_bool(dense_X)) { - - current_statement_begin__ = 573; - stan::math::assign(eta0, multiply(get_base1(X0,1,"X0",1),beta)); - current_statement_begin__ = 574; - stan::math::assign(eta1, multiply(get_base1(X1,1,"X1",1),beta)); - } else { - - current_statement_begin__ = 577; - stan::math::assign(eta0, csr_matrix_times_vector(get_base1(N,1,"N",1),K,w_X0,v_X0,u_X0,beta)); - current_statement_begin__ = 578; - stan::math::assign(eta1, csr_matrix_times_vector(get_base1(N,2,"N",1),K,w_X1,v_X1,u_X1,beta)); - } - } else { - - current_statement_begin__ = 582; - stan::math::assign(eta0, rep_vector(0.0,get_base1(N,1,"N",1))); - current_statement_begin__ = 583; - stan::math::assign(eta1, rep_vector(0.0,get_base1(N,2,"N",1))); - } - current_statement_begin__ = 585; - if (as_bool((primitive_value(logical_eq(has_intercept,0)) && primitive_value(dense_X)))) { - { - T__ tmp; - (void) tmp; // dummy to suppress unused var warning - - stan::math::initialize(tmp, DUMMY_VAR__); - stan::math::fill(tmp,DUMMY_VAR__); - - - current_statement_begin__ = 587; - stan::math::assign(tmp, dot_product(xbar,beta)); - current_statement_begin__ = 588; - stan::math::assign(eta0, add(eta0,tmp)); - current_statement_begin__ = 589; - stan::math::assign(eta1, add(eta1,tmp)); - } - } - current_statement_begin__ = 591; - if (as_bool(logical_eq(has_offset,1))) { - - current_statement_begin__ = 592; - stan::math::assign(eta0, add(eta0,offset0)); - current_statement_begin__ = 593; - stan::math::assign(eta1, add(eta1,offset1)); - } - current_statement_begin__ = 595; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 596; - stan::math::assign(eta0, add(eta0,multiply(S0,beta_smooth))); - current_statement_begin__ = 597; - stan::math::assign(eta1, add(eta1,multiply(S1,beta_smooth))); - } - current_statement_begin__ = 599; - if (as_bool(special_case)) { - current_statement_begin__ = 599; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 600; - stan::math::assign(eta0, add(eta0,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V0,i,"V0",1)), stan::model::nil_index_list()), "b"))); - current_statement_begin__ = 601; - stan::math::assign(eta1, add(eta1,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V1,i,"V1",1)), stan::model::nil_index_list()), "b"))); - } - } else if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 604; - stan::math::assign(eta0, add(eta0,csr_matrix_times_vector(get_base1(N,1,"N",1),q,w0,v0,u0,b))); - current_statement_begin__ = 605; - stan::math::assign(eta1, add(eta1,csr_matrix_times_vector(get_base1(N,2,"N",1),q,w1,v1,u1,b))); - } - current_statement_begin__ = 607; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 608; - if (as_bool(logical_neq(link,4))) { - - current_statement_begin__ = 609; - stan::math::assign(eta0, add(get_base1(gamma,1,"gamma",1),eta0)); - current_statement_begin__ = 610; - stan::math::assign(eta1, add(get_base1(gamma,1,"gamma",1),eta1)); - } else { - { - T__ shift; - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, DUMMY_VAR__); - stan::math::fill(shift,DUMMY_VAR__); - - - current_statement_begin__ = 614; - stan::math::assign(shift, stan::math::fmax(max(eta0),max(eta1))); - current_statement_begin__ = 615; - stan::math::assign(eta0, subtract(add(get_base1(gamma,1,"gamma",1),eta0),shift)); - current_statement_begin__ = 616; - stan::math::assign(eta1, subtract(add(get_base1(gamma,1,"gamma",1),eta1),shift)); - } - } - } - current_statement_begin__ = 620; - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - { - T__ dummy; - (void) dummy; // dummy to suppress unused var warning - - stan::math::initialize(dummy, DUMMY_VAR__); - stan::math::fill(dummy,DUMMY_VAR__); - - - current_statement_begin__ = 622; - stan::math::assign(dummy, ll_bern_lp(eta0,eta1,link,N, lp__, lp_accum__, pstream__)); - } - } else if (as_bool(logical_eq(prior_PD,0))) { - - current_statement_begin__ = 625; - lp_accum__.add(dot_product(weights0,pw_bern(0,eta0,link, pstream__))); - current_statement_begin__ = 626; - lp_accum__.add(dot_product(weights1,pw_bern(1,eta1,link, pstream__))); - } - current_statement_begin__ = 632; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 632; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 633; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 636; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 637; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 638; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 639; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 640; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 644; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 645; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 646; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 647; - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - current_statement_begin__ = 649; - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - current_statement_begin__ = 650; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 651; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - current_statement_begin__ = 654; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 655; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - current_statement_begin__ = 658; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 659; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - current_statement_begin__ = 660; - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - current_statement_begin__ = 663; - lp_accum__.add(normal_log(z_beta,0,1)); - } - current_statement_begin__ = 668; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 669; - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - current_statement_begin__ = 670; - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - current_statement_begin__ = 672; - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - current_statement_begin__ = 677; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 678; - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - current_statement_begin__ = 679; - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 681; - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - current_statement_begin__ = 682; - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - current_statement_begin__ = 684; - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - current_statement_begin__ = 686; - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - current_statement_begin__ = 689; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 689; - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - current_statement_begin__ = 690; - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_bernoulli_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 512; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 512; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 513; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 514; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 515; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 518; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 519; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 520; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 523; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 524; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 525; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 528; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 530; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 533; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 534; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 535; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 536; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 537; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 538; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 540; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 544; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 545; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 546; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 546; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 547; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 549; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 550; - if (as_bool(special_case)) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 552; - stan::math::assign(theta_L, elt_multiply(scale,tau)); - current_statement_begin__ = 553; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 553; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 554; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 556; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 557; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 561; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - current_statement_begin__ = 563; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - current_statement_begin__ = 695; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 696; - if (as_bool(dense_X)) { - current_statement_begin__ = 696; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - current_statement_begin__ = 697; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - { - validate_non_negative_index("pi0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - vector_d pi0(static_cast(get_base1(N,1,"N",1))); - (void) pi0; // dummy to suppress unused var warning - - stan::math::initialize(pi0, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi0,DUMMY_VAR__); - validate_non_negative_index("pi1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - vector_d pi1(static_cast(get_base1(N,2,"N",1))); - (void) pi1; // dummy to suppress unused var warning - - stan::math::initialize(pi1, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi1,DUMMY_VAR__); - validate_non_negative_index("eta0", "get_base1(N,1,\"N\",1)", get_base1(N,1,"N",1)); - vector_d eta0(static_cast(get_base1(N,1,"N",1))); - (void) eta0; // dummy to suppress unused var warning - - stan::math::initialize(eta0, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta0,DUMMY_VAR__); - validate_non_negative_index("eta1", "get_base1(N,2,\"N\",1)", get_base1(N,2,"N",1)); - vector_d eta1(static_cast(get_base1(N,2,"N",1))); - (void) eta1; // dummy to suppress unused var warning - - stan::math::initialize(eta1, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta1,DUMMY_VAR__); - - - current_statement_begin__ = 705; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 706; - if (as_bool(dense_X)) { - - current_statement_begin__ = 707; - stan::math::assign(eta0, multiply(get_base1(X0,1,"X0",1),beta)); - current_statement_begin__ = 708; - stan::math::assign(eta1, multiply(get_base1(X1,1,"X1",1),beta)); - } else { - - current_statement_begin__ = 711; - stan::math::assign(eta0, csr_matrix_times_vector(get_base1(N,1,"N",1),K,w_X0,v_X0,u_X0,beta)); - current_statement_begin__ = 712; - stan::math::assign(eta1, csr_matrix_times_vector(get_base1(N,2,"N",1),K,w_X1,v_X1,u_X1,beta)); - } - } else { - - current_statement_begin__ = 716; - stan::math::assign(eta0, rep_vector(0.0,get_base1(N,1,"N",1))); - current_statement_begin__ = 717; - stan::math::assign(eta1, rep_vector(0.0,get_base1(N,2,"N",1))); - } - current_statement_begin__ = 719; - if (as_bool((primitive_value(logical_eq(has_intercept,0)) && primitive_value(dense_X)))) { - { - double tmp(0.0); - (void) tmp; // dummy to suppress unused var warning - - stan::math::initialize(tmp, std::numeric_limits::quiet_NaN()); - stan::math::fill(tmp,DUMMY_VAR__); - - - current_statement_begin__ = 721; - stan::math::assign(tmp, dot_product(xbar,beta)); - current_statement_begin__ = 722; - stan::math::assign(eta0, add(eta0,tmp)); - current_statement_begin__ = 723; - stan::math::assign(eta1, add(eta1,tmp)); - } - } - current_statement_begin__ = 725; - if (as_bool(logical_eq(has_offset,1))) { - - current_statement_begin__ = 726; - stan::math::assign(eta0, add(eta0,offset0)); - current_statement_begin__ = 727; - stan::math::assign(eta1, add(eta1,offset1)); - } - current_statement_begin__ = 729; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 730; - stan::math::assign(eta0, add(eta0,multiply(S0,beta_smooth))); - current_statement_begin__ = 731; - stan::math::assign(eta1, add(eta1,multiply(S1,beta_smooth))); - } - current_statement_begin__ = 733; - if (as_bool(special_case)) { - current_statement_begin__ = 733; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 734; - stan::math::assign(eta0, add(eta0,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V0,i,"V0",1)), stan::model::nil_index_list()), "b"))); - current_statement_begin__ = 735; - stan::math::assign(eta1, add(eta1,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V1,i,"V1",1)), stan::model::nil_index_list()), "b"))); - } - } else if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 738; - stan::math::assign(eta0, add(eta0,csr_matrix_times_vector(get_base1(N,1,"N",1),q,w0,v0,u0,b))); - current_statement_begin__ = 739; - stan::math::assign(eta1, add(eta1,csr_matrix_times_vector(get_base1(N,2,"N",1),q,w1,v1,u1,b))); - } - current_statement_begin__ = 741; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 742; - if (as_bool(logical_neq(link,4))) { - - current_statement_begin__ = 743; - stan::math::assign(eta0, add(get_base1(gamma,1,"gamma",1),eta0)); - current_statement_begin__ = 744; - stan::math::assign(eta1, add(get_base1(gamma,1,"gamma",1),eta1)); - } else { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - current_statement_begin__ = 748; - stan::math::assign(shift, stan::math::fmax(max(eta0),max(eta1))); - current_statement_begin__ = 749; - stan::math::assign(eta0, subtract(add(get_base1(gamma,1,"gamma",1),eta0),shift)); - current_statement_begin__ = 750; - stan::math::assign(eta1, subtract(add(get_base1(gamma,1,"gamma",1),eta1),shift)); - current_statement_begin__ = 751; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - shift)); - } - } - } - current_statement_begin__ = 754; - stan::math::assign(pi0, linkinv_bern(eta0,link, pstream__)); - current_statement_begin__ = 755; - stan::math::assign(pi1, linkinv_bern(eta1,link, pstream__)); - current_statement_begin__ = 756; - for (int n = 1; n <= get_base1(N,1,"N",1); ++n) { - current_statement_begin__ = 756; - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(get_base1(pi0,n,"pi0",1), base_rng__))); - } - current_statement_begin__ = 757; - for (int n = 1; n <= get_base1(N,2,"N",1); ++n) { - current_statement_begin__ = 757; - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(get_base1(pi1,n,"pi1",1), base_rng__))); - } - current_statement_begin__ = 758; - stan::math::assign(mean_PPD, (mean_PPD / NN)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_bernoulli"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_binomial_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_binomial"); - reader.add_event(690, 690, "end", "model_binomial"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 52; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 54; - if (as_bool(logical_eq(nc,1))) { - - current_statement_begin__ = 55; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - current_statement_begin__ = 57; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - current_statement_begin__ = 65; - stan::math::assign(pi, divide(pi,sum(pi))); - current_statement_begin__ = 68; - stan::math::assign(zeta_mark, (zeta_mark + nc)); - current_statement_begin__ = 69; - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - current_statement_begin__ = 70; - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - current_statement_begin__ = 73; - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - current_statement_begin__ = 74; - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - current_statement_begin__ = 75; - stan::math::assign(rho_mark, (rho_mark + 1)); - current_statement_begin__ = 76; - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - current_statement_begin__ = 77; - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - current_statement_begin__ = 79; - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - current_statement_begin__ = 83; - stan::math::assign(z_T_mark, (z_T_mark + r)); - current_statement_begin__ = 84; - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - current_statement_begin__ = 85; - for (int c = 1; c <= r; ++c) { - current_statement_begin__ = 85; - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - current_statement_begin__ = 86; - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - current_statement_begin__ = 87; - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - current_statement_begin__ = 91; - for (int c = 1; c <= nc; ++c) { - current_statement_begin__ = 91; - for (int r = c; r <= nc; ++r) { - - current_statement_begin__ = 92; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - current_statement_begin__ = 93; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - current_statement_begin__ = 97; - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 115; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 117; - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - current_statement_begin__ = 119; - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - current_statement_begin__ = 120; - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - current_statement_begin__ = 121; - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - current_statement_begin__ = 122; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - current_statement_begin__ = 126; - for (int c = 1; c <= nc; ++c) { - - current_statement_begin__ = 127; - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 128; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - current_statement_begin__ = 129; - for (int r = (c + 1); r <= nc; ++r) { - - current_statement_begin__ = 130; - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 131; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - current_statement_begin__ = 134; - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - current_statement_begin__ = 136; - stan::math::assign(b_mark, (b_mark - 1)); - current_statement_begin__ = 137; - for (int s = 1; s <= nc; ++s) { - current_statement_begin__ = 137; - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - current_statement_begin__ = 138; - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - current_statement_begin__ = 142; - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - current_statement_begin__ = 165; - lp_accum__.add(normal_log(z_b,0,1)); - current_statement_begin__ = 166; - lp_accum__.add(normal_log(z_T,0,1)); - current_statement_begin__ = 167; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 167; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - current_statement_begin__ = 171; - stan::math::assign(pos_reg, (pos_reg + 1)); - current_statement_begin__ = 172; - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - current_statement_begin__ = 173; - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - current_statement_begin__ = 174; - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - current_statement_begin__ = 175; - stan::math::assign(nu, (nu - 0.5)); - current_statement_begin__ = 176; - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - current_statement_begin__ = 177; - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - current_statement_begin__ = 179; - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - current_statement_begin__ = 180; - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - current_statement_begin__ = 182; - lp_accum__.add(gamma_log(zeta,delta,1)); - current_statement_begin__ = 183; - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - current_statement_begin__ = 200; - stan::math::assign(K, rows(z_beta)); - current_statement_begin__ = 201; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 201; - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - current_statement_begin__ = 202; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 218; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - current_statement_begin__ = 233; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 233; - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - current_statement_begin__ = 234; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - current_statement_begin__ = 256; - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - current_statement_begin__ = 271; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 271; - for (int j = 1; j <= N; ++j) { - current_statement_begin__ = 271; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 272; - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - current_statement_begin__ = 273; - stan::math::assign(pos, (pos + 1)); - } - } - } - current_statement_begin__ = 275; - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_binom(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 287; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 287; - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 288; - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 289; - return stan::math::promote_scalar(add(divide(atan(eta),stan::math::pi()),0.5)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 290; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 291; - return stan::math::promote_scalar(inv_cloglog(eta)); - } else { - current_statement_begin__ = 292; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 292; - current_statement_begin__ = 293; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_binom(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -ll_binom_lp(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 305; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 305; - lp_accum__.add(binomial_logit_log(y,trials,eta)); - } else if (as_bool(logical_lt(link,4))) { - current_statement_begin__ = 306; - lp_accum__.add(binomial_log(y,trials,linkinv_binom(eta,link, pstream__))); - } else if (as_bool(logical_eq(link,4))) { - - current_statement_begin__ = 308; - for (int n = 1; n <= num_elements(y); ++n) { - - current_statement_begin__ = 309; - lp_accum__.add((get_base1(y,n,"y",1) * get_base1(eta,n,"eta",1))); - current_statement_begin__ = 310; - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * log1m_exp(get_base1(eta,n,"eta",1)))); - current_statement_begin__ = 311; - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } else if (as_bool(logical_eq(link,5))) { - - current_statement_begin__ = 315; - for (int n = 1; n <= num_elements(y); ++n) { - { - fun_scalar_t__ neg_exp_eta; - (void) neg_exp_eta; // dummy to suppress unused var warning - - stan::math::initialize(neg_exp_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(neg_exp_eta,DUMMY_VAR__); - stan::math::assign(neg_exp_eta,-(exp(get_base1(eta,n,"eta",1)))); - - - current_statement_begin__ = 317; - lp_accum__.add((get_base1(y,n,"y",1) * log1m_exp(neg_exp_eta))); - current_statement_begin__ = 318; - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * neg_exp_eta)); - current_statement_begin__ = 319; - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } - } else { - current_statement_begin__ = 322; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 322; - current_statement_begin__ = 323; - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_binom_lp_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_binom_lp(y, trials, eta, link, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_binom(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 336; - if (as_bool(logical_eq(link,1))) { - - current_statement_begin__ = 337; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 338; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_logit_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,5))) { - { - validate_non_negative_index("pi", "N", N); - Eigen::Matrix pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,linkinv_binom(eta,link, pstream__)); - - - current_statement_begin__ = 342; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 342; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(pi,n,"pi",1))); - } - } - } else { - current_statement_begin__ = 344; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 344; - current_statement_begin__ = 345; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_binom(y, trials, eta, link, pstream__); - } -}; - -class model_binomial : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - vector y; - vector trials; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - int num_non_zero; - vector_d w; - vector v; - vector u; - int special_case; - double aux; - vector > V; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_binomial(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_binomial(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_binomial_namespace::model_binomial"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y", "N", N); - context__.validate_dims("data initialization", "y", "int", context__.to_vec(N)); - validate_non_negative_index("y", "N", N); - y = std::vector(N,int(0)); - vals_i__ = context__.vals_i("y"); - pos__ = 0; - size_t y_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < y_limit_0__; ++i_0__) { - y[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("trials", "N", N); - context__.validate_dims("data initialization", "trials", "int", context__.to_vec(N)); - validate_non_negative_index("trials", "N", N); - trials = std::vector(N,int(0)); - vals_i__ = context__.vals_i("trials"); - pos__ = 0; - size_t trials_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < trials_limit_0__; ++i_0__) { - trials[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec()); - num_non_zero = int(0); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - num_non_zero = vals_i__[pos__++]; - validate_non_negative_index("w", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec(num_non_zero)); - validate_non_negative_index("w", "num_non_zero", num_non_zero); - w = vector_d(static_cast(num_non_zero)); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = num_non_zero; - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "v", "int", context__.to_vec(num_non_zero)); - validate_non_negative_index("v", "num_non_zero", num_non_zero); - v = std::vector(num_non_zero,int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = num_non_zero; - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_gt(t,0) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - u = std::vector((logical_gt(t,0) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_gt(t,0) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"y[k0__]",y[k0__],0); - } - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"trials[k0__]",trials[k0__],0); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - check_greater_or_equal(function__,"num_non_zero",num_non_zero,0); - for (int k0__ = 0; k0__ < num_non_zero; ++k0__) { - check_greater_or_equal(function__,"v[k0__]",v[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (N + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u[k0__]",u[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - // initialize data variables - aux = double(0); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::not_a_number()); - validate_non_negative_index("V", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V", "N", N); - V = std::vector >((special_case ? t : 0 ),std::vector(N,int(0))); - stan::math::fill(V, std::numeric_limits::min()); - stan::math::assign(V,make_V(N,(special_case ? t : 0 ),v, pstream__)); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - current_statement_begin__ = 455; - if (as_bool(logical_lte(prior_dist,2))) { - current_statement_begin__ = 455; - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - current_statement_begin__ = 456; - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - current_statement_begin__ = 457; - stan::math::assign(hs, 4); - } else { - current_statement_begin__ = 458; - stan::math::assign(hs, 0); - } - current_statement_begin__ = 460; - stan::math::assign(pos, 1); - current_statement_begin__ = 461; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 462; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - current_statement_begin__ = 463; - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - current_statement_begin__ = 464; - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - current_statement_begin__ = 465; - stan::math::assign(pos, (pos + 1)); - } - } - current_statement_begin__ = 468; - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - current_statement_begin__ = 468; - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < N; ++k1__) { - check_greater_or_equal(function__,"V[k0__][k1__]",V[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - } - - ~model_binomial() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_ub_unconstrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ),lp__)); - else - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 496; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 496; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 497; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 498; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 499; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 502; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 503; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 504; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 507; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 508; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 509; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 512; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 514; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 517; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 518; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 519; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 520; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 521; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 522; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 524; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 528; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 529; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 530; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 530; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 531; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 533; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 534; - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 536; - stan::math::assign(theta_L, elt_multiply(scale,tau)); - current_statement_begin__ = 537; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 537; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 538; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 540; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 541; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 545; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - current_statement_begin__ = 547; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 554; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 555; - if (as_bool(dense_X)) { - current_statement_begin__ = 555; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 556; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 558; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 559; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 559; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 560; - if (as_bool(K_smooth)) { - current_statement_begin__ = 560; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 561; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 563; - if (as_bool(special_case)) { - current_statement_begin__ = 563; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 563; - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - current_statement_begin__ = 564; - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - current_statement_begin__ = 566; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 567; - if (as_bool(logical_neq(link,4))) { - current_statement_begin__ = 567; - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - current_statement_begin__ = 568; - stan::math::assign(eta, subtract(add(get_base1(gamma,1,"gamma",1),eta),max(eta))); - } - } else { - - current_statement_begin__ = 573; - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - current_statement_begin__ = 577; - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - { - T__ dummy; - (void) dummy; // dummy to suppress unused var warning - - stan::math::initialize(dummy, DUMMY_VAR__); - stan::math::fill(dummy,DUMMY_VAR__); - - - current_statement_begin__ = 579; - stan::math::assign(dummy, ll_binom_lp(y,trials,eta,link, lp__, lp_accum__, pstream__)); - } - } else if (as_bool(logical_eq(prior_PD,0))) { - current_statement_begin__ = 582; - lp_accum__.add(dot_product(weights,pw_binom(y,trials,eta,link, pstream__))); - } - current_statement_begin__ = 587; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 587; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 588; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 591; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 592; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 593; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 594; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 595; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 599; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 600; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 601; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 602; - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - current_statement_begin__ = 604; - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - current_statement_begin__ = 605; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 606; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - current_statement_begin__ = 609; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 610; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - current_statement_begin__ = 613; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 614; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - current_statement_begin__ = 615; - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - current_statement_begin__ = 618; - lp_accum__.add(normal_log(z_beta,0,1)); - } - current_statement_begin__ = 623; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 624; - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - current_statement_begin__ = 625; - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - current_statement_begin__ = 627; - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - current_statement_begin__ = 632; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 633; - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - current_statement_begin__ = 634; - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 636; - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - current_statement_begin__ = 637; - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - current_statement_begin__ = 639; - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - current_statement_begin__ = 641; - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - current_statement_begin__ = 645; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 645; - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - current_statement_begin__ = 646; - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_binomial_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_ub_constrain((logical_eq(link,4) ? 0.0 : stan::math::positive_infinity() ))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 496; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 496; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 497; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 498; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 499; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 502; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 503; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 504; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 507; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 508; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 509; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 512; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 514; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 517; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 518; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 519; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 520; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 521; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 522; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 524; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 528; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 529; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 530; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 530; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 531; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 533; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 534; - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 536; - stan::math::assign(theta_L, elt_multiply(scale,tau)); - current_statement_begin__ = 537; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 537; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 538; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 540; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 541; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 545; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - current_statement_begin__ = 547; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - current_statement_begin__ = 651; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 652; - if (as_bool(dense_X)) { - current_statement_begin__ = 652; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - current_statement_begin__ = 653; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - { - validate_non_negative_index("pi", "N", N); - vector_d pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 659; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 660; - if (as_bool(dense_X)) { - current_statement_begin__ = 660; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 661; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 663; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 664; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 664; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 665; - if (as_bool(K_smooth)) { - current_statement_begin__ = 665; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 666; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 668; - if (as_bool(special_case)) { - current_statement_begin__ = 668; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 668; - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - current_statement_begin__ = 669; - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - current_statement_begin__ = 671; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 672; - if (as_bool(logical_neq(link,4))) { - current_statement_begin__ = 672; - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - current_statement_begin__ = 675; - stan::math::assign(shift, max(eta)); - current_statement_begin__ = 676; - stan::math::assign(eta, subtract(add(get_base1(gamma,1,"gamma",1),eta),shift)); - current_statement_begin__ = 677; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - shift)); - } - } - } else { - - current_statement_begin__ = 683; - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - current_statement_begin__ = 686; - stan::math::assign(pi, linkinv_binom(eta,link, pstream__)); - current_statement_begin__ = 687; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 687; - stan::math::assign(mean_PPD, (mean_PPD + binomial_rng(get_base1(trials,n,"trials",1),get_base1(pi,n,"pi",1), base_rng__))); - } - current_statement_begin__ = 688; - stan::math::assign(mean_PPD, (mean_PPD / N)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_binomial"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_continuous_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_continuous"); - reader.add_event(1369, 1369, "end", "model_continuous"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 52; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 54; - if (as_bool(logical_eq(nc,1))) { - - current_statement_begin__ = 55; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - current_statement_begin__ = 57; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - current_statement_begin__ = 65; - stan::math::assign(pi, divide(pi,sum(pi))); - current_statement_begin__ = 68; - stan::math::assign(zeta_mark, (zeta_mark + nc)); - current_statement_begin__ = 69; - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - current_statement_begin__ = 70; - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - current_statement_begin__ = 73; - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - current_statement_begin__ = 74; - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - current_statement_begin__ = 75; - stan::math::assign(rho_mark, (rho_mark + 1)); - current_statement_begin__ = 76; - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - current_statement_begin__ = 77; - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - current_statement_begin__ = 79; - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - current_statement_begin__ = 83; - stan::math::assign(z_T_mark, (z_T_mark + r)); - current_statement_begin__ = 84; - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - current_statement_begin__ = 85; - for (int c = 1; c <= r; ++c) { - current_statement_begin__ = 85; - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - current_statement_begin__ = 86; - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - current_statement_begin__ = 87; - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - current_statement_begin__ = 91; - for (int c = 1; c <= nc; ++c) { - current_statement_begin__ = 91; - for (int r = c; r <= nc; ++r) { - - current_statement_begin__ = 92; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - current_statement_begin__ = 93; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - current_statement_begin__ = 97; - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 115; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 117; - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - current_statement_begin__ = 119; - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - current_statement_begin__ = 120; - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - current_statement_begin__ = 121; - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - current_statement_begin__ = 122; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - current_statement_begin__ = 126; - for (int c = 1; c <= nc; ++c) { - - current_statement_begin__ = 127; - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 128; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - current_statement_begin__ = 129; - for (int r = (c + 1); r <= nc; ++r) { - - current_statement_begin__ = 130; - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 131; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - current_statement_begin__ = 134; - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - current_statement_begin__ = 136; - stan::math::assign(b_mark, (b_mark - 1)); - current_statement_begin__ = 137; - for (int s = 1; s <= nc; ++s) { - current_statement_begin__ = 137; - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - current_statement_begin__ = 138; - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - current_statement_begin__ = 142; - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - current_statement_begin__ = 165; - lp_accum__.add(normal_log(z_b,0,1)); - current_statement_begin__ = 166; - lp_accum__.add(normal_log(z_T,0,1)); - current_statement_begin__ = 167; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 167; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - current_statement_begin__ = 171; - stan::math::assign(pos_reg, (pos_reg + 1)); - current_statement_begin__ = 172; - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - current_statement_begin__ = 173; - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - current_statement_begin__ = 174; - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - current_statement_begin__ = 175; - stan::math::assign(nu, (nu - 0.5)); - current_statement_begin__ = 176; - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - current_statement_begin__ = 177; - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - current_statement_begin__ = 179; - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - current_statement_begin__ = 180; - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - current_statement_begin__ = 182; - lp_accum__.add(gamma_log(zeta,delta,1)); - current_statement_begin__ = 183; - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - current_statement_begin__ = 200; - stan::math::assign(K, rows(z_beta)); - current_statement_begin__ = 201; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 201; - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - current_statement_begin__ = 202; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 218; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - current_statement_begin__ = 233; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 233; - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - current_statement_begin__ = 234; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - current_statement_begin__ = 256; - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - current_statement_begin__ = 271; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 271; - for (int j = 1; j <= N; ++j) { - current_statement_begin__ = 271; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 272; - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - current_statement_begin__ = 273; - stan::math::assign(pos, (pos + 1)); - } - } - } - current_statement_begin__ = 275; - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gauss(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 287; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 287; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 288; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 289; - return stan::math::promote_scalar(inv(eta)); - } else { - current_statement_begin__ = 290; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 290; - current_statement_begin__ = 291; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gauss(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gauss(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 302; - return stan::math::promote_scalar(subtract((-(0.5) * log((6.2831853071795862 * sigma))),multiply(0.5,square(divide(subtract(y,linkinv_gauss(eta,link, pstream__)),sigma))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) const { - return pw_gauss(y, eta, sigma, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gamma(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 314; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 314; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 315; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 316; - return stan::math::promote_scalar(inv(eta)); - } else { - current_statement_begin__ = 317; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 317; - current_statement_begin__ = 318; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gamma(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -GammaReg(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ ret; - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - stan::math::assign(ret,((rows(y) * ((shape * log(shape)) - stan::math::lgamma(shape))) + ((shape - 1) * sum_log_y))); - - - current_statement_begin__ = 335; - if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 336; - stan::math::assign(ret, ((ret - (shape * sum(eta))) - (shape * sum(elt_divide(y,exp(eta)))))); - } else if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 338; - stan::math::assign(ret, ((ret - (shape * sum(log(eta)))) - (shape * sum(elt_divide(y,eta))))); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 340; - stan::math::assign(ret, ((ret + (shape * sum(log(eta)))) - (shape * dot_product(eta,y)))); - } else { - current_statement_begin__ = 341; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 341; - current_statement_begin__ = 342; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct GammaReg_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) const { - return GammaReg(y, eta, shape, link, sum_log_y, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gamma(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 356; - if (as_bool(logical_eq(link,3))) { - - current_statement_begin__ = 357; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 358; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape * get_base1(eta,n,"eta",1)))); - } - } else if (as_bool(logical_eq(link,2))) { - - current_statement_begin__ = 362; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 363; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / exp(get_base1(eta,n,"eta",1))))); - } - } else if (as_bool(logical_eq(link,1))) { - - current_statement_begin__ = 367; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 368; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / get_base1(eta,n,"eta",1)))); - } - } else { - current_statement_begin__ = 371; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 371; - current_statement_begin__ = 372; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) const { - return pw_gamma(y, eta, shape, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_inv_gaussian(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 383; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 383; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 384; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 385; - return stan::math::promote_scalar(inv(eta)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 386; - return stan::math::promote_scalar(inv_sqrt(eta)); - } else { - current_statement_begin__ = 387; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 387; - current_statement_begin__ = 388; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_inv_gaussian_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_inv_gaussian(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type>::type -inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 403; - return stan::math::promote_scalar(((((0.5 * rows(y)) * log((lambda / 6.2831853071795862))) - (1.5 * sum_log_y)) - ((0.5 * lambda) * dot_self(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_functor__ { - template - typename boost::math::tools::promote_args::type>::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return inv_gaussian(y, mu, lambda, sum_log_y, sqrt_y, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -pw_inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_inv_gaussian(eta,link, pstream__)); - - - current_statement_begin__ = 422; - return stan::math::promote_scalar(subtract(add(multiply((-(0.5) * lambda),square(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))),(0.5 * log((lambda / 6.2831853071795862)))),multiply(1.5,log_y))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_inv_gaussian_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return pw_inv_gaussian(y, eta, lambda, link, log_y, sqrt_y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -inv_gaussian_rng(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ mu2; - (void) mu2; // dummy to suppress unused var warning - - stan::math::initialize(mu2, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu2,DUMMY_VAR__); - stan::math::assign(mu2,square(mu)); - fun_scalar_t__ z; - (void) z; // dummy to suppress unused var warning - - stan::math::initialize(z, std::numeric_limits::quiet_NaN()); - stan::math::fill(z,DUMMY_VAR__); - stan::math::assign(z,uniform_rng(0,1, base_rng__)); - fun_scalar_t__ y; - (void) y; // dummy to suppress unused var warning - - stan::math::initialize(y, std::numeric_limits::quiet_NaN()); - stan::math::fill(y,DUMMY_VAR__); - stan::math::assign(y,square(normal_rng(0,1, base_rng__))); - fun_scalar_t__ x; - (void) x; // dummy to suppress unused var warning - - stan::math::initialize(x, std::numeric_limits::quiet_NaN()); - stan::math::fill(x,DUMMY_VAR__); - stan::math::assign(x,(mu + (((mu2 * y) - (mu * sqrt(((((4 * mu) * lambda) * y) + (mu2 * square(y)))))) / (2 * lambda)))); - - - current_statement_begin__ = 441; - if (as_bool(logical_lte(z,(mu / (mu + x))))) { - current_statement_begin__ = 441; - return stan::math::promote_scalar(x); - } else { - current_statement_begin__ = 442; - return stan::math::promote_scalar((mu2 / x)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_rng_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) const { - return inv_gaussian_rng(mu, lambda, base_rng__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 453; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 453; - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 454; - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 455; - return stan::math::promote_scalar(inv_cloglog(eta)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 456; - return stan::math::promote_scalar(add(0.5,divide(atan(eta),stan::math::pi()))); - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 457; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,6))) { - current_statement_begin__ = 458; - return stan::math::promote_scalar(subtract(1,inv_cloglog(minus(eta)))); - } else { - current_statement_begin__ = 459; - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 459; - current_statement_begin__ = 460; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta_z(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 471; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 471; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 472; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 473; - return stan::math::promote_scalar(square(eta)); - } else { - current_statement_begin__ = 474; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 475; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta_z(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - - - current_statement_begin__ = 490; - for (int n = 1; n <= rows(y); ++n) { - - current_statement_begin__ = 491; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * dispersion),((1 - get_base1(mu,n,"mu",1)) * dispersion))); - } - current_statement_begin__ = 493; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) const { - return pw_beta(y, eta, dispersion, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta_z(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - validate_non_negative_index("mu_z", "rows(y)", rows(y)); - Eigen::Matrix mu_z(static_cast(rows(y))); - (void) mu_z; // dummy to suppress unused var warning - - stan::math::initialize(mu_z, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu_z,DUMMY_VAR__); - stan::math::assign(mu_z,linkinv_beta_z(eta_z,link_phi, pstream__)); - - - current_statement_begin__ = 510; - for (int n = 1; n <= rows(y); ++n) { - - current_statement_begin__ = 511; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * get_base1(mu_z,n,"mu_z",1)),((1 - get_base1(mu,n,"mu",1)) * get_base1(mu_z,n,"mu_z",1)))); - } - current_statement_begin__ = 513; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) const { - return pw_beta_z(y, eta, eta_z, link, link_phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asymp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOff(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOrig(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_biexp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fol(const Eigen::Matrix& Dose, - const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fpl(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_gompertz(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_logis(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_micmen(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_weibull(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__); - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asymp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 535; - if (as_bool(logical_gt(rows(Phi),1))) { - { - validate_non_negative_index("Asym", "rows(Phi)", rows(Phi)); - Eigen::Matrix Asym(static_cast(rows(Phi))); - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi")); - - - current_statement_begin__ = 537; - return stan::math::promote_scalar(add(Asym,elt_multiply(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),Asym),exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"))),input))))); - } - } else { - { - fun_scalar_t__ Asym; - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,get_base1(Phi,1,1,"Phi",1)); - - - current_statement_begin__ = 541; - return stan::math::promote_scalar(add(Asym,multiply((get_base1(Phi,1,2,"Phi",1) - Asym),exp(multiply(-(exp(get_base1(Phi,1,3,"Phi",1))),input))))); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_asymp_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_asymp(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOff(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 547; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 548; - return stan::math::promote_scalar(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),subtract(1,exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"))),subtract(input,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"))))))); - } else { - current_statement_begin__ = 550; - return stan::math::promote_scalar(multiply(get_base1(Phi,1,1,"Phi",1),subtract(1,exp(multiply(-(exp(get_base1(Phi,1,2,"Phi",1))),subtract(input,get_base1(Phi,1,3,"Phi",1))))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_asympOff_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_asympOff(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_asympOrig(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 555; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 556; - return stan::math::promote_scalar(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),subtract(1,exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"))),input))))); - } else { - current_statement_begin__ = 558; - return stan::math::promote_scalar(multiply(get_base1(Phi,1,1,"Phi",1),subtract(1,exp(multiply(-(exp(get_base1(Phi,1,2,"Phi",1))),input))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_asympOrig_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_asympOrig(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_biexp(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 563; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 564; - return stan::math::promote_scalar(add(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"))),input))),elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"),exp(elt_multiply(minus(exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(4), stan::model::nil_index_list())), "Phi"))),input))))); - } else { - current_statement_begin__ = 567; - return stan::math::promote_scalar(add(multiply(get_base1(Phi,1,1,"Phi",1),exp(multiply(-(exp(get_base1(Phi,1,2,"Phi",1))),input))),multiply(get_base1(Phi,1,3,"Phi",1),exp(multiply(-(exp(get_base1(Phi,1,4,"Phi",1))),input))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_biexp_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_biexp(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fol(const Eigen::Matrix& Dose, - const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int Phi_rows(0); - (void) Phi_rows; // dummy to suppress unused var warning - - stan::math::fill(Phi_rows, std::numeric_limits::min()); - stan::math::assign(Phi_rows,rows(Phi)); - - - current_statement_begin__ = 574; - if (as_bool(logical_gt(Phi_rows,1))) { - { - validate_non_negative_index("lKe", "Phi_rows", Phi_rows); - Eigen::Matrix lKe(static_cast(Phi_rows)); - (void) lKe; // dummy to suppress unused var warning - - stan::math::initialize(lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKe,DUMMY_VAR__); - stan::math::assign(lKe,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi")); - validate_non_negative_index("lKa", "Phi_rows", Phi_rows); - Eigen::Matrix lKa(static_cast(Phi_rows)); - (void) lKa; // dummy to suppress unused var warning - - stan::math::initialize(lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKa,DUMMY_VAR__); - stan::math::assign(lKa,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi")); - validate_non_negative_index("exp_lKe", "Phi_rows", Phi_rows); - Eigen::Matrix exp_lKe(static_cast(Phi_rows)); - (void) exp_lKe; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKe,DUMMY_VAR__); - stan::math::assign(exp_lKe,exp(lKe)); - validate_non_negative_index("exp_lKa", "Phi_rows", Phi_rows); - Eigen::Matrix exp_lKa(static_cast(Phi_rows)); - (void) exp_lKa; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKa,DUMMY_VAR__); - stan::math::assign(exp_lKa,exp(lKa)); - - - current_statement_begin__ = 579; - return stan::math::promote_scalar(elt_divide(elt_multiply(elt_multiply(Dose,exp(subtract(add(lKe,lKa),stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi")))),subtract(exp(elt_multiply(minus(exp_lKe),input)),exp(elt_multiply(minus(exp_lKa),input)))),subtract(exp_lKa,exp_lKe))); - } - } else { - { - fun_scalar_t__ lKe; - (void) lKe; // dummy to suppress unused var warning - - stan::math::initialize(lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKe,DUMMY_VAR__); - stan::math::assign(lKe,get_base1(Phi,1,1,"Phi",1)); - fun_scalar_t__ lKa; - (void) lKa; // dummy to suppress unused var warning - - stan::math::initialize(lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(lKa,DUMMY_VAR__); - stan::math::assign(lKa,get_base1(Phi,1,2,"Phi",1)); - fun_scalar_t__ exp_lKe; - (void) exp_lKe; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKe, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKe,DUMMY_VAR__); - stan::math::assign(exp_lKe,exp(lKe)); - fun_scalar_t__ exp_lKa; - (void) exp_lKa; // dummy to suppress unused var warning - - stan::math::initialize(exp_lKa, std::numeric_limits::quiet_NaN()); - stan::math::fill(exp_lKa,DUMMY_VAR__); - stan::math::assign(exp_lKa,exp(lKa)); - - - current_statement_begin__ = 587; - return stan::math::promote_scalar(divide(elt_multiply(multiply(Dose,exp(((lKe + lKa) - get_base1(Phi,1,3,"Phi",1)))),subtract(exp(multiply(-(exp_lKe),input)),exp(multiply(-(exp_lKa),input)))),(exp_lKa - exp_lKe))); - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_fol_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& Dose, - const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_fol(Dose, input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_fpl(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 595; - if (as_bool(logical_gt(rows(Phi),1))) { - { - validate_non_negative_index("A", "rows(Phi)", rows(Phi)); - Eigen::Matrix A(static_cast(rows(Phi))); - (void) A; // dummy to suppress unused var warning - - stan::math::initialize(A, std::numeric_limits::quiet_NaN()); - stan::math::fill(A,DUMMY_VAR__); - stan::math::assign(A,stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi")); - - - current_statement_begin__ = 597; - return stan::math::promote_scalar(add(A,elt_divide(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),A),add(1,exp(elt_divide(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"),input),exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(4), stan::model::nil_index_list())), "Phi")))))))); - } - } else { - { - fun_scalar_t__ A; - (void) A; // dummy to suppress unused var warning - - stan::math::initialize(A, std::numeric_limits::quiet_NaN()); - stan::math::fill(A,DUMMY_VAR__); - stan::math::assign(A,get_base1(Phi,1,1,"Phi",1)); - - - current_statement_begin__ = 601; - return stan::math::promote_scalar(add(A,elt_divide(rep_vector((get_base1(Phi,1,2,"Phi",1) - A),rows(input)),add(1,exp(divide(subtract(get_base1(Phi,1,3,"Phi",1),input),exp(get_base1(Phi,1,4,"Phi",1)))))))); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_fpl_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_fpl(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_gompertz(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("out", "rows(x)", rows(x)); - Eigen::Matrix out(static_cast(rows(x))); - (void) out; // dummy to suppress unused var warning - - stan::math::initialize(out, std::numeric_limits::quiet_NaN()); - stan::math::fill(out,DUMMY_VAR__); - - - current_statement_begin__ = 609; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 609; - for (int i = 1; i <= rows(x); ++i) { - current_statement_begin__ = 610; - stan::math::assign(get_base1_lhs(out,i,"out",1), (get_base1(Phi,i,1,"Phi",1) * exp((-(get_base1(Phi,i,2,"Phi",1)) * pow(get_base1(Phi,i,3,"Phi",1),get_base1(x,i,"x",1)))))); - } - } else { - { - fun_scalar_t__ Asym; - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,get_base1(Phi,1,1,"Phi",1)); - fun_scalar_t__ b2; - (void) b2; // dummy to suppress unused var warning - - stan::math::initialize(b2, std::numeric_limits::quiet_NaN()); - stan::math::fill(b2,DUMMY_VAR__); - stan::math::assign(b2,get_base1(Phi,1,2,"Phi",1)); - fun_scalar_t__ b3; - (void) b3; // dummy to suppress unused var warning - - stan::math::initialize(b3, std::numeric_limits::quiet_NaN()); - stan::math::fill(b3,DUMMY_VAR__); - stan::math::assign(b3,get_base1(Phi,1,3,"Phi",1)); - - - current_statement_begin__ = 615; - for (int i = 1; i <= rows(x); ++i) { - current_statement_begin__ = 615; - stan::math::assign(get_base1_lhs(out,i,"out",1), (Asym * exp((-(b2) * pow(b3,get_base1(x,i,"x",1)))))); - } - } - } - current_statement_begin__ = 617; - return stan::math::promote_scalar(out); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_gompertz_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_gompertz(x, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_logis(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 623; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 624; - return stan::math::promote_scalar(elt_divide(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),add(1,exp(elt_divide(subtract(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),input),exp(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(3), stan::model::nil_index_list())), "Phi"))))))); - } else { - current_statement_begin__ = 626; - return stan::math::promote_scalar(elt_divide(rep_vector(get_base1(Phi,1,1,"Phi",1),rows(input)),add(1,exp(divide(subtract(get_base1(Phi,1,2,"Phi",1),input),exp(get_base1(Phi,1,3,"Phi",1))))))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_logis_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_logis(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_micmen(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 632; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 633; - return stan::math::promote_scalar(elt_divide(elt_multiply(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "Phi"),input),add(stan::model::rvalue(Phi, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "Phi"),input))); - } else { - current_statement_begin__ = 635; - return stan::math::promote_scalar(elt_divide(multiply(get_base1(Phi,1,1,"Phi",1),input),add(get_base1(Phi,1,2,"Phi",1),input))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_micmen_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& input, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_micmen(input, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -SS_weibull(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("out", "rows(x)", rows(x)); - Eigen::Matrix out(static_cast(rows(x))); - (void) out; // dummy to suppress unused var warning - - stan::math::initialize(out, std::numeric_limits::quiet_NaN()); - stan::math::fill(out,DUMMY_VAR__); - - - current_statement_begin__ = 641; - if (as_bool(logical_gt(rows(Phi),1))) { - current_statement_begin__ = 641; - for (int i = 1; i <= rows(x); ++i) { - current_statement_begin__ = 642; - stan::math::assign(get_base1_lhs(out,i,"out",1), (get_base1(Phi,i,1,"Phi",1) - (get_base1(Phi,i,2,"Phi",1) * exp((-(exp(get_base1(Phi,i,3,"Phi",1))) * pow(get_base1(x,i,"x",1),get_base1(Phi,i,4,"Phi",1))))))); - } - } else { - { - fun_scalar_t__ Asym; - (void) Asym; // dummy to suppress unused var warning - - stan::math::initialize(Asym, std::numeric_limits::quiet_NaN()); - stan::math::fill(Asym,DUMMY_VAR__); - stan::math::assign(Asym,get_base1(Phi,1,1,"Phi",1)); - fun_scalar_t__ Drop; - (void) Drop; // dummy to suppress unused var warning - - stan::math::initialize(Drop, std::numeric_limits::quiet_NaN()); - stan::math::fill(Drop,DUMMY_VAR__); - stan::math::assign(Drop,get_base1(Phi,1,2,"Phi",1)); - fun_scalar_t__ lrc; - (void) lrc; // dummy to suppress unused var warning - - stan::math::initialize(lrc, std::numeric_limits::quiet_NaN()); - stan::math::fill(lrc,DUMMY_VAR__); - stan::math::assign(lrc,get_base1(Phi,1,3,"Phi",1)); - fun_scalar_t__ pwr; - (void) pwr; // dummy to suppress unused var warning - - stan::math::initialize(pwr, std::numeric_limits::quiet_NaN()); - stan::math::fill(pwr,DUMMY_VAR__); - stan::math::assign(pwr,get_base1(Phi,1,4,"Phi",1)); - - - current_statement_begin__ = 648; - for (int i = 1; i <= rows(x); ++i) { - current_statement_begin__ = 649; - stan::math::assign(get_base1_lhs(out,i,"out",1), (Asym - (Drop * exp((-(exp(lrc)) * pow(get_base1(x,i,"x",1),pwr)))))); - } - } - } - current_statement_begin__ = 651; - return stan::math::promote_scalar(out); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct SS_weibull_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& x, - const Eigen::Matrix& Phi, std::ostream* pstream__) const { - return SS_weibull(x, Phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,Eigen::Dynamic> -reshape_vec(const Eigen::Matrix& x, - const int& Rows, - const int& Cols, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("out", "Rows", Rows); - validate_non_negative_index("out", "Cols", Cols); - Eigen::Matrix out(static_cast(Rows),static_cast(Cols)); - (void) out; // dummy to suppress unused var warning - - stan::math::initialize(out, std::numeric_limits::quiet_NaN()); - stan::math::fill(out,DUMMY_VAR__); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - current_statement_begin__ = 657; - if (as_bool(logical_neq(rows(x),(Rows * Cols)))) { - current_statement_begin__ = 657; - std::stringstream errmsg_stream__; - errmsg_stream__ << "x is the wrong length"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 657; - current_statement_begin__ = 658; - for (int c = 1; c <= Cols; ++c) { - current_statement_begin__ = 658; - for (int r = 1; r <= Rows; ++r) { - - current_statement_begin__ = 659; - stan::math::assign(get_base1_lhs(out,r,c,"out",1), get_base1(x,pos,"x",1)); - current_statement_begin__ = 660; - stan::math::assign(pos, (pos + 1)); - } - } - current_statement_begin__ = 662; - return stan::math::promote_scalar(out); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct reshape_vec_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,Eigen::Dynamic> - operator()(const Eigen::Matrix& x, - const int& Rows, - const int& Cols, std::ostream* pstream__) const { - return reshape_vec(x, Rows, Cols, pstream__); - } -}; - -double -make_lower(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 673; - if (as_bool(logical_eq(family,1))) { - current_statement_begin__ = 673; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - current_statement_begin__ = 674; - if (as_bool(logical_lte(family,3))) { - - current_statement_begin__ = 675; - if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 675; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - current_statement_begin__ = 676; - return stan::math::promote_scalar(0); - } - current_statement_begin__ = 678; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_lower_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_lower(family, link, pstream__); - } -}; - -double -make_upper(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 689; - if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,5))))) { - current_statement_begin__ = 689; - return stan::math::promote_scalar(0); - } - current_statement_begin__ = 690; - return stan::math::promote_scalar(stan::math::positive_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_upper_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_upper(family, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -test_csr_matrix_times_vector(const int& m, - const int& n, - const Eigen::Matrix& w, - const std::vector& v, - const std::vector& u, - const Eigen::Matrix& b, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 706; - return stan::math::promote_scalar(csr_matrix_times_vector(m,n,w,v,u,b)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct test_csr_matrix_times_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const int& m, - const int& n, - const Eigen::Matrix& w, - const std::vector& v, - const std::vector& u, - const Eigen::Matrix& b, std::ostream* pstream__) const { - return test_csr_matrix_times_vector(m, n, w, v, u, b, pstream__); - } -}; - -class model_continuous : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - int len_y; - double lb_y; - double ub_y; - vector_d y; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - int num_non_zero; - vector_d w; - vector v; - vector u; - int special_case; - int has_intercept_z; - int link_phi; - int z_dim; - matrix_d betareg_z; - row_vector_d zbar; - int prior_dist_z; - int prior_dist_for_intercept_z; - vector_d prior_scale_z; - double prior_scale_for_intercept_z; - vector_d prior_mean_z; - double prior_mean_for_intercept_z; - vector_d prior_df_z; - double prior_df_for_intercept_z; - double global_prior_scale_z; - vector num_normals_z; - int SSfun; - vector_d input; - vector_d Dose; - vector_d sqrt_y; - vector_d log_y; - double sum_log_y; - vector > V; - int hs_z; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_continuous(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_continuous(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_continuous_namespace::model_continuous"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "len_y", "int", context__.to_vec()); - len_y = int(0); - vals_i__ = context__.vals_i("len_y"); - pos__ = 0; - len_y = vals_i__[pos__++]; - context__.validate_dims("data initialization", "lb_y", "double", context__.to_vec()); - lb_y = double(0); - vals_r__ = context__.vals_r("lb_y"); - pos__ = 0; - lb_y = vals_r__[pos__++]; - context__.validate_dims("data initialization", "ub_y", "double", context__.to_vec()); - ub_y = double(0); - vals_r__ = context__.vals_r("ub_y"); - pos__ = 0; - ub_y = vals_r__[pos__++]; - validate_non_negative_index("y", "len_y", len_y); - context__.validate_dims("data initialization", "y", "vector_d", context__.to_vec(len_y)); - validate_non_negative_index("y", "len_y", len_y); - y = vector_d(static_cast(len_y)); - vals_r__ = context__.vals_r("y"); - pos__ = 0; - size_t y_i_vec_lim__ = len_y; - for (size_t i_vec__ = 0; i_vec__ < y_i_vec_lim__; ++i_vec__) { - y[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec()); - num_non_zero = int(0); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - num_non_zero = vals_i__[pos__++]; - validate_non_negative_index("w", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec(num_non_zero)); - validate_non_negative_index("w", "num_non_zero", num_non_zero); - w = vector_d(static_cast(num_non_zero)); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = num_non_zero; - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "v", "int", context__.to_vec(num_non_zero)); - validate_non_negative_index("v", "num_non_zero", num_non_zero); - v = std::vector(num_non_zero,int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = num_non_zero; - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_gt(t,0) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - u = std::vector((logical_gt(t,0) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_gt(t,0) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept_z", "int", context__.to_vec()); - has_intercept_z = int(0); - vals_i__ = context__.vals_i("has_intercept_z"); - pos__ = 0; - has_intercept_z = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link_phi", "int", context__.to_vec()); - link_phi = int(0); - vals_i__ = context__.vals_i("link_phi"); - pos__ = 0; - link_phi = vals_i__[pos__++]; - context__.validate_dims("data initialization", "z_dim", "int", context__.to_vec()); - z_dim = int(0); - vals_i__ = context__.vals_i("z_dim"); - pos__ = 0; - z_dim = vals_i__[pos__++]; - validate_non_negative_index("betareg_z", "N", N); - validate_non_negative_index("betareg_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "betareg_z", "matrix_d", context__.to_vec(N,z_dim)); - validate_non_negative_index("betareg_z", "N", N); - validate_non_negative_index("betareg_z", "z_dim", z_dim); - betareg_z = matrix_d(static_cast(N),static_cast(z_dim)); - vals_r__ = context__.vals_r("betareg_z"); - pos__ = 0; - size_t betareg_z_m_mat_lim__ = N; - size_t betareg_z_n_mat_lim__ = z_dim; - for (size_t n_mat__ = 0; n_mat__ < betareg_z_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < betareg_z_m_mat_lim__; ++m_mat__) { - betareg_z(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("zbar", "z_dim", z_dim); - context__.validate_dims("data initialization", "zbar", "row_vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("zbar", "z_dim", z_dim); - zbar = row_vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("zbar"); - pos__ = 0; - size_t zbar_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < zbar_i_vec_lim__; ++i_vec__) { - zbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_dist_z", "int", context__.to_vec()); - prior_dist_z = int(0); - vals_i__ = context__.vals_i("prior_dist_z"); - pos__ = 0; - prior_dist_z = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept_z", "int", context__.to_vec()); - prior_dist_for_intercept_z = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept_z"); - pos__ = 0; - prior_dist_for_intercept_z = vals_i__[pos__++]; - validate_non_negative_index("prior_scale_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "prior_scale_z", "vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("prior_scale_z", "z_dim", z_dim); - prior_scale_z = vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("prior_scale_z"); - pos__ = 0; - size_t prior_scale_z_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_z_i_vec_lim__; ++i_vec__) { - prior_scale_z[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept_z", "double", context__.to_vec()); - prior_scale_for_intercept_z = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept_z"); - pos__ = 0; - prior_scale_for_intercept_z = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "prior_mean_z", "vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("prior_mean_z", "z_dim", z_dim); - prior_mean_z = vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("prior_mean_z"); - pos__ = 0; - size_t prior_mean_z_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_z_i_vec_lim__; ++i_vec__) { - prior_mean_z[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept_z", "double", context__.to_vec()); - prior_mean_for_intercept_z = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept_z"); - pos__ = 0; - prior_mean_for_intercept_z = vals_r__[pos__++]; - validate_non_negative_index("prior_df_z", "z_dim", z_dim); - context__.validate_dims("data initialization", "prior_df_z", "vector_d", context__.to_vec(z_dim)); - validate_non_negative_index("prior_df_z", "z_dim", z_dim); - prior_df_z = vector_d(static_cast(z_dim)); - vals_r__ = context__.vals_r("prior_df_z"); - pos__ = 0; - size_t prior_df_z_i_vec_lim__ = z_dim; - for (size_t i_vec__ = 0; i_vec__ < prior_df_z_i_vec_lim__; ++i_vec__) { - prior_df_z[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept_z", "double", context__.to_vec()); - prior_df_for_intercept_z = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept_z"); - pos__ = 0; - prior_df_for_intercept_z = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale_z", "double", context__.to_vec()); - global_prior_scale_z = double(0); - vals_r__ = context__.vals_r("global_prior_scale_z"); - pos__ = 0; - global_prior_scale_z = vals_r__[pos__++]; - validate_non_negative_index("num_normals_z", "(logical_eq(prior_dist_z,7) ? z_dim : 0 )", (logical_eq(prior_dist_z,7) ? z_dim : 0 )); - context__.validate_dims("data initialization", "num_normals_z", "int", context__.to_vec((logical_eq(prior_dist_z,7) ? z_dim : 0 ))); - validate_non_negative_index("num_normals_z", "(logical_eq(prior_dist_z,7) ? z_dim : 0 )", (logical_eq(prior_dist_z,7) ? z_dim : 0 )); - num_normals_z = std::vector((logical_eq(prior_dist_z,7) ? z_dim : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals_z"); - pos__ = 0; - size_t num_normals_z_limit_0__ = (logical_eq(prior_dist_z,7) ? z_dim : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_z_limit_0__; ++i_0__) { - num_normals_z[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "SSfun", "int", context__.to_vec()); - SSfun = int(0); - vals_i__ = context__.vals_i("SSfun"); - pos__ = 0; - SSfun = vals_i__[pos__++]; - validate_non_negative_index("input", "(logical_gt(SSfun,0) ? len_y : 0 )", (logical_gt(SSfun,0) ? len_y : 0 )); - context__.validate_dims("data initialization", "input", "vector_d", context__.to_vec((logical_gt(SSfun,0) ? len_y : 0 ))); - validate_non_negative_index("input", "(logical_gt(SSfun,0) ? len_y : 0 )", (logical_gt(SSfun,0) ? len_y : 0 )); - input = vector_d(static_cast((logical_gt(SSfun,0) ? len_y : 0 ))); - vals_r__ = context__.vals_r("input"); - pos__ = 0; - size_t input_i_vec_lim__ = (logical_gt(SSfun,0) ? len_y : 0 ); - for (size_t i_vec__ = 0; i_vec__ < input_i_vec_lim__; ++i_vec__) { - input[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("Dose", "(logical_eq(SSfun,5) ? len_y : 0 )", (logical_eq(SSfun,5) ? len_y : 0 )); - context__.validate_dims("data initialization", "Dose", "vector_d", context__.to_vec((logical_eq(SSfun,5) ? len_y : 0 ))); - validate_non_negative_index("Dose", "(logical_eq(SSfun,5) ? len_y : 0 )", (logical_eq(SSfun,5) ? len_y : 0 )); - Dose = vector_d(static_cast((logical_eq(SSfun,5) ? len_y : 0 ))); - vals_r__ = context__.vals_r("Dose"); - pos__ = 0; - size_t Dose_i_vec_lim__ = (logical_eq(SSfun,5) ? len_y : 0 ); - for (size_t i_vec__ = 0; i_vec__ < Dose_i_vec_lim__; ++i_vec__) { - Dose[i_vec__] = vals_r__[pos__++]; - } - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - check_greater_or_equal(function__,"len_y",len_y,0); - check_greater_or_equal(function__,"ub_y",ub_y,lb_y); - check_greater_or_equal(function__,"y",y,lb_y); - check_less_or_equal(function__,"y",y,ub_y); - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - check_greater_or_equal(function__,"num_non_zero",num_non_zero,0); - for (int k0__ = 0; k0__ < num_non_zero; ++k0__) { - check_greater_or_equal(function__,"v[k0__]",v[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (N + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u[k0__]",u[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - check_greater_or_equal(function__,"has_intercept_z",has_intercept_z,0); - check_less_or_equal(function__,"has_intercept_z",has_intercept_z,1); - check_greater_or_equal(function__,"link_phi",link_phi,0); - check_greater_or_equal(function__,"z_dim",z_dim,0); - check_greater_or_equal(function__,"prior_dist_z",prior_dist_z,0); - check_less_or_equal(function__,"prior_dist_z",prior_dist_z,7); - check_greater_or_equal(function__,"prior_dist_for_intercept_z",prior_dist_for_intercept_z,0); - check_less_or_equal(function__,"prior_dist_for_intercept_z",prior_dist_for_intercept_z,2); - check_greater_or_equal(function__,"prior_scale_z",prior_scale_z,0); - check_greater_or_equal(function__,"prior_scale_for_intercept_z",prior_scale_for_intercept_z,0); - check_greater_or_equal(function__,"prior_df_z",prior_df_z,0); - check_greater_or_equal(function__,"prior_df_for_intercept_z",prior_df_for_intercept_z,0); - check_greater_or_equal(function__,"global_prior_scale_z",global_prior_scale_z,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist_z,7) ? z_dim : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals_z[k0__]",num_normals_z[k0__],2); - } - check_greater_or_equal(function__,"SSfun",SSfun,0); - check_less_or_equal(function__,"SSfun",SSfun,10); - // initialize data variables - validate_non_negative_index("sqrt_y", "(logical_eq(family,3) ? len_y : 0 )", (logical_eq(family,3) ? len_y : 0 )); - sqrt_y = vector_d(static_cast((logical_eq(family,3) ? len_y : 0 ))); - stan::math::fill(sqrt_y,DUMMY_VAR__); - validate_non_negative_index("log_y", "(logical_eq(family,3) ? len_y : 0 )", (logical_eq(family,3) ? len_y : 0 )); - log_y = vector_d(static_cast((logical_eq(family,3) ? len_y : 0 ))); - stan::math::fill(log_y,DUMMY_VAR__); - sum_log_y = double(0); - stan::math::fill(sum_log_y,DUMMY_VAR__); - stan::math::assign(sum_log_y,(logical_eq(family,1) ? stan::math::not_a_number() : sum(log(y)) )); - validate_non_negative_index("V", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V", "len_y", len_y); - V = std::vector >((special_case ? t : 0 ),std::vector(len_y,int(0))); - stan::math::fill(V, std::numeric_limits::min()); - stan::math::assign(V,make_V(len_y,(special_case ? t : 0 ),v, pstream__)); - hs_z = int(0); - stan::math::fill(hs_z, std::numeric_limits::min()); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - current_statement_begin__ = 843; - if (as_bool(logical_lte(prior_dist,2))) { - current_statement_begin__ = 843; - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - current_statement_begin__ = 844; - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - current_statement_begin__ = 845; - stan::math::assign(hs, 4); - } else { - current_statement_begin__ = 846; - stan::math::assign(hs, 0); - } - current_statement_begin__ = 848; - stan::math::assign(pos, 1); - current_statement_begin__ = 849; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 850; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - current_statement_begin__ = 851; - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - current_statement_begin__ = 852; - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - current_statement_begin__ = 853; - stan::math::assign(pos, (pos + 1)); - } - } - current_statement_begin__ = 856; - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - current_statement_begin__ = 856; - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - current_statement_begin__ = 859; - if (as_bool(logical_lte(prior_dist_z,2))) { - current_statement_begin__ = 859; - stan::math::assign(hs_z, 0); - } else if (as_bool(logical_eq(prior_dist_z,3))) { - current_statement_begin__ = 860; - stan::math::assign(hs_z, 2); - } else if (as_bool(logical_eq(prior_dist_z,4))) { - current_statement_begin__ = 861; - stan::math::assign(hs_z, 4); - } else { - current_statement_begin__ = 862; - stan::math::assign(hs_z, 0); - } - current_statement_begin__ = 863; - stan::math::assign(is_continuous, 1); - current_statement_begin__ = 865; - if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 866; - stan::math::assign(sqrt_y, sqrt(y)); - current_statement_begin__ = 867; - stan::math::assign(log_y, log(y)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < len_y; ++k1__) { - check_greater_or_equal(function__,"V[k0__][k1__]",V[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"hs_z",hs_z,0); - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - ++num_params_r__; - validate_non_negative_index("z_omega", "(logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )", (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - num_params_r__ += (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); - validate_non_negative_index("gamma_z", "has_intercept_z", has_intercept_z); - num_params_r__ += has_intercept_z; - validate_non_negative_index("global_z", "hs_z", hs_z); - num_params_r__ += hs_z; - validate_non_negative_index("local_z", "z_dim", z_dim); - validate_non_negative_index("local_z", "hs_z", hs_z); - num_params_r__ += z_dim * hs_z; - validate_non_negative_index("S_z", "z_dim", z_dim); - validate_non_negative_index("S_z", "(primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))", (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))); - num_params_r__ += z_dim * (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); - validate_non_negative_index("one_over_lambda_z", "logical_eq(prior_dist_z,6)", logical_eq(prior_dist_z,6)); - num_params_r__ += logical_eq(prior_dist_z,6); - } - - ~model_continuous() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_lub_unconstrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - if (!(context__.contains_r("aux_unscaled"))) - throw std::runtime_error("variable aux_unscaled missing"); - vals_r__ = context__.vals_r("aux_unscaled"); - pos__ = 0U; - context__.validate_dims("initialization", "aux_unscaled", "double", context__.to_vec()); - // generate_declaration aux_unscaled - double aux_unscaled(0); - aux_unscaled = vals_r__[pos__++]; - try { - writer__.scalar_lb_unconstrain(0,aux_unscaled); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable aux_unscaled: ") + e.what()); - } - - if (!(context__.contains_r("z_omega"))) - throw std::runtime_error("variable z_omega missing"); - vals_r__ = context__.vals_r("z_omega"); - pos__ = 0U; - validate_non_negative_index("z_omega", "(logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )", (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - context__.validate_dims("initialization", "z_omega", "vector_d", context__.to_vec((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ))); - // generate_declaration z_omega - vector_d z_omega(static_cast((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++j1__) - z_omega(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_omega); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_omega: ") + e.what()); - } - - if (!(context__.contains_r("gamma_z"))) - throw std::runtime_error("variable gamma_z missing"); - vals_r__ = context__.vals_r("gamma_z"); - pos__ = 0U; - validate_non_negative_index("gamma_z", "has_intercept_z", has_intercept_z); - context__.validate_dims("initialization", "gamma_z", "double", context__.to_vec(has_intercept_z)); - // generate_declaration gamma_z - std::vector gamma_z(has_intercept_z,double(0)); - for (int i0__ = 0U; i0__ < has_intercept_z; ++i0__) - gamma_z[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept_z; ++i0__) - try { - writer__.scalar_lb_unconstrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ),gamma_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma_z: ") + e.what()); - } - - if (!(context__.contains_r("global_z"))) - throw std::runtime_error("variable global_z missing"); - vals_r__ = context__.vals_r("global_z"); - pos__ = 0U; - validate_non_negative_index("global_z", "hs_z", hs_z); - context__.validate_dims("initialization", "global_z", "double", context__.to_vec(hs_z)); - // generate_declaration global_z - std::vector global_z(hs_z,double(0)); - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - global_z[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global_z: ") + e.what()); - } - - if (!(context__.contains_r("local_z"))) - throw std::runtime_error("variable local_z missing"); - vals_r__ = context__.vals_r("local_z"); - pos__ = 0U; - validate_non_negative_index("local_z", "hs_z", hs_z); - validate_non_negative_index("local_z", "z_dim", z_dim); - context__.validate_dims("initialization", "local_z", "vector_d", context__.to_vec(hs_z,z_dim)); - // generate_declaration local_z - std::vector local_z(hs_z,vector_d(static_cast(z_dim))); - for (int j1__ = 0U; j1__ < z_dim; ++j1__) - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - local_z[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs_z; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local_z: ") + e.what()); - } - - if (!(context__.contains_r("S_z"))) - throw std::runtime_error("variable S_z missing"); - vals_r__ = context__.vals_r("S_z"); - pos__ = 0U; - validate_non_negative_index("S_z", "(primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))", (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))); - validate_non_negative_index("S_z", "z_dim", z_dim); - context__.validate_dims("initialization", "S_z", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))),z_dim)); - // generate_declaration S_z - std::vector S_z((primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))),vector_d(static_cast(z_dim))); - for (int j1__ = 0U; j1__ < z_dim; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++i0__) - S_z[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,S_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable S_z: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda_z"))) - throw std::runtime_error("variable one_over_lambda_z missing"); - vals_r__ = context__.vals_r("one_over_lambda_z"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda_z", "logical_eq(prior_dist_z,6)", logical_eq(prior_dist_z,6)); - context__.validate_dims("initialization", "one_over_lambda_z", "double", context__.to_vec(logical_eq(prior_dist_z,6))); - // generate_declaration one_over_lambda_z - std::vector one_over_lambda_z(logical_eq(prior_dist_z,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist_z,6); ++i0__) - one_over_lambda_z[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist_z,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda_z[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda_z: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),lp__)); - else - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - T__ aux_unscaled; - (void) aux_unscaled; // dummy to suppress unused var warning - if (jacobian__) - aux_unscaled = in__.scalar_lb_constrain(0,lp__); - else - aux_unscaled = in__.scalar_lb_constrain(0); - - Eigen::Matrix z_omega; - (void) z_omega; // dummy to suppress unused var warning - if (jacobian__) - z_omega = in__.vector_constrain((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ),lp__); - else - z_omega = in__.vector_constrain((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - - vector gamma_z; - size_t dim_gamma_z_0__ = has_intercept_z; - gamma_z.reserve(dim_gamma_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_z_0__; ++k_0__) { - if (jacobian__) - gamma_z.push_back(in__.scalar_lb_constrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ),lp__)); - else - gamma_z.push_back(in__.scalar_lb_constrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ))); - } - - vector global_z; - size_t dim_global_z_0__ = hs_z; - global_z.reserve(dim_global_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_z_0__; ++k_0__) { - if (jacobian__) - global_z.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global_z.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local_z; - size_t dim_local_z_0__ = hs_z; - local_z.reserve(dim_local_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_z_0__; ++k_0__) { - if (jacobian__) - local_z.push_back(in__.vector_lb_constrain(0,z_dim,lp__)); - else - local_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - - vector > S_z; - size_t dim_S_z_0__ = (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); - S_z.reserve(dim_S_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_S_z_0__; ++k_0__) { - if (jacobian__) - S_z.push_back(in__.vector_lb_constrain(0,z_dim,lp__)); - else - S_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - - vector one_over_lambda_z; - size_t dim_one_over_lambda_z_0__ = logical_eq(prior_dist_z,6); - one_over_lambda_z.reserve(dim_one_over_lambda_z_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_z_0__; ++k_0__) { - if (jacobian__) - one_over_lambda_z.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda_z.push_back(in__.scalar_lb_constrain(0)); - } - - - // transformed parameters - T__ aux; - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, DUMMY_VAR__); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(aux_unscaled) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * aux_unscaled) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * aux_unscaled)) )) )); - validate_non_negative_index("omega", "z_dim", z_dim); - Eigen::Matrix omega(static_cast(z_dim)); - (void) omega; // dummy to suppress unused var warning - - stan::math::initialize(omega, DUMMY_VAR__); - stan::math::fill(omega,DUMMY_VAR__); - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 908; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 908; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 909; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 910; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 911; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 914; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 915; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 916; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 919; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 920; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 921; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 924; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 926; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 929; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 930; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 931; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 932; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 933; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 934; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 936; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 940; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 941; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 942; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 942; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 943; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 946; - if (as_bool(logical_eq(prior_dist_z,0))) { - current_statement_begin__ = 946; - stan::math::assign(omega, z_omega); - } else if (as_bool(logical_eq(prior_dist_z,1))) { - current_statement_begin__ = 947; - stan::math::assign(omega, add(elt_multiply(z_omega,prior_scale_z),prior_mean_z)); - } else if (as_bool(logical_eq(prior_dist_z,2))) { - current_statement_begin__ = 948; - for (int k = 1; k <= z_dim; ++k) { - - current_statement_begin__ = 949; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((CFt(get_base1(omega,k,"omega",1),get_base1(prior_df_z,k,"prior_df_z",1), pstream__) * get_base1(prior_scale_z,k,"prior_scale_z",1)) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } else if (as_bool(logical_eq(prior_dist_z,3))) { - current_statement_begin__ = 952; - stan::math::assign(omega, hs_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,4))) { - current_statement_begin__ = 954; - stan::math::assign(omega, hsplus_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,5))) { - current_statement_begin__ = 956; - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(prior_scale_z,sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,6))) { - current_statement_begin__ = 958; - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda_z,1,"one_over_lambda_z",1),prior_scale_z),sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 961; - for (int k = 1; k <= z_dim; ++k) { - - current_statement_begin__ = 962; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), get_base1(z_omega,z_pos,"z_omega",1)); - current_statement_begin__ = 963; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 964; - for (int n = 2; n <= get_base1(num_normals_z,k,"num_normals_z",1); ++n) { - - current_statement_begin__ = 965; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), (get_base1(omega,k,"omega",1) * get_base1(z_omega,z_pos,"z_omega",1))); - current_statement_begin__ = 966; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 968; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((get_base1(omega,k,"omega",1) * pow(get_base1(prior_scale_z,k,"prior_scale_z",1),get_base1(num_normals_z,k,"num_normals_z",1))) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } - } - current_statement_begin__ = 973; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 974; - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 976; - stan::math::assign(theta_L, multiply(elt_multiply(scale,tau),aux)); - current_statement_begin__ = 977; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 977; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 978; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 980; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 981; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 985; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - current_statement_begin__ = 987; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - if (stan::math::is_uninitialized(aux)) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: aux"; - throw std::runtime_error(msg__.str()); - } - for (int i0__ = 0; i0__ < z_dim; ++i0__) { - if (stan::math::is_uninitialized(omega(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: omega" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta_z", "N", N); - Eigen::Matrix eta_z(static_cast(N)); - (void) eta_z; // dummy to suppress unused var warning - - stan::math::initialize(eta_z, DUMMY_VAR__); - stan::math::fill(eta_z,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 995; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 996; - if (as_bool(dense_X)) { - current_statement_begin__ = 996; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 997; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 999; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 1000; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 1000; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 1001; - if (as_bool(K_smooth)) { - current_statement_begin__ = 1001; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 1002; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 1004; - if (as_bool(special_case)) { - current_statement_begin__ = 1004; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 1004; - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - current_statement_begin__ = 1005; - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - current_statement_begin__ = 1007; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 1008; - if (as_bool((primitive_value((primitive_value(logical_eq(family,1)) || primitive_value(logical_eq(link,2)))) || primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_neq(link,5))))))) { - current_statement_begin__ = 1008; - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,5))))) { - current_statement_begin__ = 1009; - stan::math::assign(eta, add(subtract(eta,max(eta)),get_base1(gamma,1,"gamma",1))); - } else { - current_statement_begin__ = 1010; - stan::math::assign(eta, add(subtract(eta,min(eta)),get_base1(gamma,1,"gamma",1))); - } - } else { - - current_statement_begin__ = 1015; - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - current_statement_begin__ = 1018; - if (as_bool(logical_gt(SSfun,0))) { - { - validate_non_negative_index("P", "len_y", len_y); - validate_non_negative_index("P", "K", K); - Eigen::Matrix P(static_cast(len_y),static_cast(K)); - (void) P; // dummy to suppress unused var warning - - stan::math::initialize(P, DUMMY_VAR__); - stan::math::fill(P,DUMMY_VAR__); - - - current_statement_begin__ = 1020; - stan::math::assign(P, reshape_vec(eta,len_y,K, pstream__)); - current_statement_begin__ = 1021; - if (as_bool(logical_lt(SSfun,5))) { - - current_statement_begin__ = 1022; - if (as_bool(logical_lte(SSfun,2))) { - - current_statement_begin__ = 1023; - if (as_bool(logical_eq(SSfun,1))) { - current_statement_begin__ = 1023; - lp_accum__.add(normal_log(y,SS_asymp(input,P, pstream__),aux)); - } else { - current_statement_begin__ = 1024; - lp_accum__.add(normal_log(y,SS_asympOff(input,P, pstream__),aux)); - } - } else if (as_bool(logical_eq(SSfun,3))) { - current_statement_begin__ = 1026; - lp_accum__.add(normal_log(y,SS_asympOrig(input,P, pstream__),aux)); - } else { - - current_statement_begin__ = 1028; - for (int i = 1; i <= len_y; ++i) { - current_statement_begin__ = 1028; - stan::math::assign(get_base1_lhs(P,i,1,"P",1), (get_base1(P,i,1,"P",1) + exp(get_base1(P,i,3,"P",1)))); - } - current_statement_begin__ = 1029; - lp_accum__.add(normal_log(y,SS_biexp(input,P, pstream__),aux)); - } - } else { - - current_statement_begin__ = 1033; - if (as_bool(logical_lte(SSfun,7))) { - - current_statement_begin__ = 1034; - if (as_bool(logical_eq(SSfun,5))) { - current_statement_begin__ = 1034; - lp_accum__.add(normal_log(y,SS_fol(Dose,input,P, pstream__),aux)); - } else if (as_bool(logical_eq(SSfun,6))) { - current_statement_begin__ = 1035; - lp_accum__.add(normal_log(y,SS_fpl(input,P, pstream__),aux)); - } else { - current_statement_begin__ = 1036; - lp_accum__.add(normal_log(y,SS_gompertz(input,P, pstream__),aux)); - } - } else { - - current_statement_begin__ = 1039; - if (as_bool(logical_eq(SSfun,8))) { - current_statement_begin__ = 1039; - lp_accum__.add(normal_log(y,SS_logis(input,P, pstream__),aux)); - } else if (as_bool(logical_eq(SSfun,9))) { - current_statement_begin__ = 1040; - lp_accum__.add(normal_log(y,SS_micmen(input,P, pstream__),aux)); - } else { - current_statement_begin__ = 1041; - lp_accum__.add(normal_log(y,SS_weibull(input,P, pstream__),aux)); - } - } - } - } - } else if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - - current_statement_begin__ = 1047; - if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(z_dim,0)))) && primitive_value(logical_gt(link_phi,0))))) { - - current_statement_begin__ = 1048; - stan::math::assign(eta_z, multiply(betareg_z,omega)); - } else if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(z_dim,0)))) && primitive_value(logical_eq(has_intercept_z,1))))) { - - current_statement_begin__ = 1051; - stan::math::assign(eta_z, rep_vector(0.0,N)); - } - current_statement_begin__ = 1054; - if (as_bool(logical_eq(has_intercept_z,1))) { - - current_statement_begin__ = 1055; - if (as_bool(logical_gt(link_phi,1))) { - - current_statement_begin__ = 1056; - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),get_base1(gamma_z,1,"gamma_z",1))); - } else { - - current_statement_begin__ = 1059; - stan::math::assign(eta_z, add(eta_z,get_base1(gamma_z,1,"gamma_z",1))); - } - } else { - - current_statement_begin__ = 1064; - if (as_bool(logical_gt(link_phi,1))) { - - current_statement_begin__ = 1065; - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),dot_product(zbar,omega))); - } else { - - current_statement_begin__ = 1068; - stan::math::assign(eta_z, add(eta_z,dot_product(zbar,omega))); - } - } - current_statement_begin__ = 1071; - if (as_bool(logical_eq(family,1))) { - - current_statement_begin__ = 1072; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 1073; - lp_accum__.add(normal_log(y,eta,aux)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 1075; - lp_accum__.add(normal_log(y,exp(eta),aux)); - } else { - current_statement_begin__ = 1077; - lp_accum__.add(normal_log(y,divide_real_by_vector(1,eta, pstream__),aux)); - } - } else if (as_bool(logical_eq(family,2))) { - - current_statement_begin__ = 1081; - lp_accum__.add(GammaReg(y,eta,aux,link,sum_log_y, pstream__)); - } else if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 1084; - lp_accum__.add(inv_gaussian(y,linkinv_inv_gaussian(eta,link, pstream__),aux,sum_log_y,sqrt_y, pstream__)); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link_phi,0))))) { - { - validate_non_negative_index("mu", "N", N); - Eigen::Matrix mu(static_cast(N)); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, DUMMY_VAR__); - stan::math::fill(mu,DUMMY_VAR__); - - - current_statement_begin__ = 1089; - stan::math::assign(mu, linkinv_beta(eta,link, pstream__)); - current_statement_begin__ = 1090; - lp_accum__.add(beta_log(y,multiply(mu,aux),multiply(subtract(1,mu),aux))); - } - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(link_phi,0))))) { - { - validate_non_negative_index("mu", "N", N); - Eigen::Matrix mu(static_cast(N)); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, DUMMY_VAR__); - stan::math::fill(mu,DUMMY_VAR__); - validate_non_negative_index("mu_z", "N", N); - Eigen::Matrix mu_z(static_cast(N)); - (void) mu_z; // dummy to suppress unused var warning - - stan::math::initialize(mu_z, DUMMY_VAR__); - stan::math::fill(mu_z,DUMMY_VAR__); - - - current_statement_begin__ = 1095; - stan::math::assign(mu, linkinv_beta(eta,link, pstream__)); - current_statement_begin__ = 1096; - stan::math::assign(mu_z, linkinv_beta_z(eta_z,link_phi, pstream__)); - current_statement_begin__ = 1097; - lp_accum__.add(beta_log(y,rows_dot_product(mu,mu_z),rows_dot_product(subtract(1,mu),mu_z))); - } - } - } else if (as_bool(logical_eq(prior_PD,0))) { - { - validate_non_negative_index("summands", "N", N); - Eigen::Matrix summands(static_cast(N)); - (void) summands; // dummy to suppress unused var warning - - stan::math::initialize(summands, DUMMY_VAR__); - stan::math::fill(summands,DUMMY_VAR__); - - - current_statement_begin__ = 1103; - if (as_bool(logical_eq(family,1))) { - current_statement_begin__ = 1103; - stan::math::assign(summands, pw_gauss(y,eta,aux,link, pstream__)); - } else if (as_bool(logical_eq(family,2))) { - current_statement_begin__ = 1104; - stan::math::assign(summands, pw_gamma(y,eta,aux,link, pstream__)); - } else if (as_bool(logical_eq(family,3))) { - current_statement_begin__ = 1105; - stan::math::assign(summands, pw_inv_gaussian(y,eta,aux,link,log_y,sqrt_y, pstream__)); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link_phi,0))))) { - current_statement_begin__ = 1106; - stan::math::assign(summands, pw_beta(y,eta,aux,link, pstream__)); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(link_phi,0))))) { - current_statement_begin__ = 1107; - stan::math::assign(summands, pw_beta_z(y,eta,eta_z,link,link_phi, pstream__)); - } - current_statement_begin__ = 1108; - lp_accum__.add(dot_product(weights,summands)); - } - } - current_statement_begin__ = 1113; - if (as_bool((primitive_value(logical_gt(prior_dist_for_aux,0)) && primitive_value(logical_gt(prior_scale_for_aux,0))))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 1115; - if (as_bool(logical_eq(prior_dist_for_aux,1))) { - current_statement_begin__ = 1116; - lp_accum__.add((normal_log(aux_unscaled,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_aux,2))) { - current_statement_begin__ = 1118; - lp_accum__.add((student_t_log(aux_unscaled,prior_df_for_aux,0,1) - log_half)); - } else { - current_statement_begin__ = 1120; - lp_accum__.add(exponential_log(aux_unscaled,1)); - } - } - } - current_statement_begin__ = 1126; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 1126; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 1127; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 1130; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 1131; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 1132; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 1133; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 1134; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 1138; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 1139; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 1140; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 1141; - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - current_statement_begin__ = 1143; - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - current_statement_begin__ = 1144; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 1145; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - current_statement_begin__ = 1148; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 1149; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - current_statement_begin__ = 1152; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 1153; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - current_statement_begin__ = 1154; - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - current_statement_begin__ = 1157; - lp_accum__.add(normal_log(z_beta,0,1)); - } - current_statement_begin__ = 1162; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 1163; - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - current_statement_begin__ = 1164; - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - current_statement_begin__ = 1166; - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - current_statement_begin__ = 1171; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 1172; - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - current_statement_begin__ = 1173; - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 1175; - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - current_statement_begin__ = 1176; - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - current_statement_begin__ = 1178; - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - current_statement_begin__ = 1180; - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - current_statement_begin__ = 1185; - if (as_bool(logical_eq(prior_dist_z,1))) { - current_statement_begin__ = 1185; - lp_accum__.add(normal_log(z_omega,0,1)); - } else if (as_bool(logical_eq(prior_dist_z,2))) { - current_statement_begin__ = 1186; - lp_accum__.add(normal_log(z_omega,0,1)); - } else if (as_bool(logical_eq(prior_dist_z,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 1189; - lp_accum__.add(normal_log(z_omega,0,1)); - current_statement_begin__ = 1190; - lp_accum__.add((normal_log(get_base1(local_z,1,"local_z",1),0,1) - log_half)); - current_statement_begin__ = 1191; - lp_accum__.add(inv_gamma_log(get_base1(local_z,2,"local_z",1),multiply(0.5,prior_df_z),multiply(0.5,prior_df_z))); - current_statement_begin__ = 1192; - lp_accum__.add((normal_log(get_base1(global_z,1,"global_z",1),0,1) - log_half)); - current_statement_begin__ = 1193; - lp_accum__.add(inv_gamma_log(get_base1(global_z,2,"global_z",1),0.5,0.5)); - } - } else if (as_bool(logical_eq(prior_dist_z,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 1197; - lp_accum__.add(normal_log(z_omega,0,1)); - current_statement_begin__ = 1198; - lp_accum__.add((normal_log(get_base1(local_z,1,"local_z",1),0,1) - log_half)); - current_statement_begin__ = 1199; - lp_accum__.add(inv_gamma_log(get_base1(local_z,2,"local_z",1),multiply(0.5,prior_df_z),multiply(0.5,prior_df_z))); - current_statement_begin__ = 1200; - lp_accum__.add((normal_log(get_base1(local_z,3,"local_z",1),0,1) - log_half)); - current_statement_begin__ = 1202; - lp_accum__.add(inv_gamma_log(get_base1(local_z,4,"local_z",1),multiply(0.5,prior_scale_z),multiply(0.5,prior_scale_z))); - current_statement_begin__ = 1203; - lp_accum__.add((normal_log(get_base1(global_z,1,"global_z",1),0,1) - log_half)); - current_statement_begin__ = 1204; - lp_accum__.add(inv_gamma_log(get_base1(global_z,2,"global_z",1),0.5,0.5)); - } - } else if (as_bool(logical_eq(prior_dist_z,5))) { - - current_statement_begin__ = 1207; - lp_accum__.add(normal_log(z_omega,0,1)); - current_statement_begin__ = 1208; - lp_accum__.add(exponential_log(get_base1(S_z,1,"S_z",1),1)); - } else if (as_bool(logical_eq(prior_dist_z,6))) { - - current_statement_begin__ = 1211; - lp_accum__.add(normal_log(z_omega,0,1)); - current_statement_begin__ = 1212; - lp_accum__.add(exponential_log(get_base1(S_z,1,"S_z",1),1)); - current_statement_begin__ = 1213; - lp_accum__.add(chi_square_log(get_base1(one_over_lambda_z,1,"one_over_lambda_z",1),get_base1(prior_df_z,1,"prior_df_z",1))); - } else if (as_bool(logical_eq(prior_dist_z,7))) { - - current_statement_begin__ = 1216; - lp_accum__.add(normal_log(z_omega,0,1)); - } - current_statement_begin__ = 1221; - if (as_bool(logical_eq(has_intercept_z,1))) { - - current_statement_begin__ = 1222; - if (as_bool(logical_eq(prior_dist_for_intercept_z,1))) { - current_statement_begin__ = 1223; - lp_accum__.add(normal_log(gamma_z,prior_mean_for_intercept_z,prior_scale_for_intercept_z)); - } else if (as_bool(logical_eq(prior_dist_for_intercept_z,2))) { - current_statement_begin__ = 1225; - lp_accum__.add(student_t_log(gamma_z,prior_df_for_intercept_z,prior_mean_for_intercept_z,prior_scale_for_intercept_z)); - } - } - current_statement_begin__ = 1229; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 1229; - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - current_statement_begin__ = 1230; - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("aux_unscaled"); - names__.push_back("z_omega"); - names__.push_back("gamma_z"); - names__.push_back("global_z"); - names__.push_back("local_z"); - names__.push_back("S_z"); - names__.push_back("one_over_lambda_z"); - names__.push_back("aux"); - names__.push_back("omega"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("omega_int"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept_z); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs_z); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs_z); - dims__.push_back(z_dim); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6)))); - dims__.push_back(z_dim); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist_z,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(z_dim); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept_z); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_continuous_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - double aux_unscaled = in__.scalar_lb_constrain(0); - vector_d z_omega = in__.vector_constrain((logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim )); - vector gamma_z; - size_t dim_gamma_z_0__ = has_intercept_z; - for (size_t k_0__ = 0; k_0__ < dim_gamma_z_0__; ++k_0__) { - gamma_z.push_back(in__.scalar_lb_constrain((logical_lte(link_phi,1) ? stan::math::promote_scalar(stan::math::negative_infinity()) : stan::math::promote_scalar(0) ))); - } - vector global_z; - size_t dim_global_z_0__ = hs_z; - for (size_t k_0__ = 0; k_0__ < dim_global_z_0__; ++k_0__) { - global_z.push_back(in__.scalar_lb_constrain(0)); - } - vector local_z; - size_t dim_local_z_0__ = hs_z; - for (size_t k_0__ = 0; k_0__ < dim_local_z_0__; ++k_0__) { - local_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - vector S_z; - size_t dim_S_z_0__ = (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); - for (size_t k_0__ = 0; k_0__ < dim_S_z_0__; ++k_0__) { - S_z.push_back(in__.vector_lb_constrain(0,z_dim)); - } - vector one_over_lambda_z; - size_t dim_one_over_lambda_z_0__ = logical_eq(prior_dist_z,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_z_0__; ++k_0__) { - one_over_lambda_z.push_back(in__.scalar_lb_constrain(0)); - } - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - vars__.push_back(aux_unscaled); - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++k_0__) { - vars__.push_back(z_omega[k_0__]); - } - for (int k_0__ = 0; k_0__ < has_intercept_z; ++k_0__) { - vars__.push_back(gamma_z[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs_z; ++k_0__) { - vars__.push_back(global_z[k_0__]); - } - for (int k_1__ = 0; k_1__ < z_dim; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs_z; ++k_0__) { - vars__.push_back(local_z[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < z_dim; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++k_0__) { - vars__.push_back(S_z[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist_z,6); ++k_0__) { - vars__.push_back(one_over_lambda_z[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - double aux(0.0); - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(aux_unscaled) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * aux_unscaled) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * aux_unscaled)) )) )); - validate_non_negative_index("omega", "z_dim", z_dim); - vector_d omega(static_cast(z_dim)); - (void) omega; // dummy to suppress unused var warning - - stan::math::initialize(omega, std::numeric_limits::quiet_NaN()); - stan::math::fill(omega,DUMMY_VAR__); - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 908; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 908; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 909; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 910; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 911; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 914; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 915; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 916; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 919; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 920; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 921; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 924; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 926; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 929; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 930; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 931; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 932; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 933; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 934; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 936; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 940; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 941; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 942; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 942; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 943; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 946; - if (as_bool(logical_eq(prior_dist_z,0))) { - current_statement_begin__ = 946; - stan::math::assign(omega, z_omega); - } else if (as_bool(logical_eq(prior_dist_z,1))) { - current_statement_begin__ = 947; - stan::math::assign(omega, add(elt_multiply(z_omega,prior_scale_z),prior_mean_z)); - } else if (as_bool(logical_eq(prior_dist_z,2))) { - current_statement_begin__ = 948; - for (int k = 1; k <= z_dim; ++k) { - - current_statement_begin__ = 949; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((CFt(get_base1(omega,k,"omega",1),get_base1(prior_df_z,k,"prior_df_z",1), pstream__) * get_base1(prior_scale_z,k,"prior_scale_z",1)) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } else if (as_bool(logical_eq(prior_dist_z,3))) { - current_statement_begin__ = 952; - stan::math::assign(omega, hs_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,4))) { - current_statement_begin__ = 954; - stan::math::assign(omega, hsplus_prior(z_omega,global_z,local_z,global_prior_scale,1, pstream__)); - } else if (as_bool(logical_eq(prior_dist_z,5))) { - current_statement_begin__ = 956; - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(prior_scale_z,sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,6))) { - current_statement_begin__ = 958; - stan::math::assign(omega, add(prior_mean_z,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda_z,1,"one_over_lambda_z",1),prior_scale_z),sqrt(multiply(2,get_base1(S_z,1,"S_z",1)))),z_omega))); - } else if (as_bool(logical_eq(prior_dist_z,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 961; - for (int k = 1; k <= z_dim; ++k) { - - current_statement_begin__ = 962; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), get_base1(z_omega,z_pos,"z_omega",1)); - current_statement_begin__ = 963; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 964; - for (int n = 2; n <= get_base1(num_normals_z,k,"num_normals_z",1); ++n) { - - current_statement_begin__ = 965; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), (get_base1(omega,k,"omega",1) * get_base1(z_omega,z_pos,"z_omega",1))); - current_statement_begin__ = 966; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 968; - stan::math::assign(get_base1_lhs(omega,k,"omega",1), ((get_base1(omega,k,"omega",1) * pow(get_base1(prior_scale_z,k,"prior_scale_z",1),get_base1(num_normals_z,k,"num_normals_z",1))) + get_base1(prior_mean_z,k,"prior_mean_z",1))); - } - } - } - current_statement_begin__ = 973; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 974; - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 976; - stan::math::assign(theta_L, multiply(elt_multiply(scale,tau),aux)); - current_statement_begin__ = 977; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 977; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 978; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 980; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 981; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 985; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - current_statement_begin__ = 987; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - vars__.push_back(aux); - for (int k_0__ = 0; k_0__ < z_dim; ++k_0__) { - vars__.push_back(omega[k_0__]); - } - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - validate_non_negative_index("omega_int", "has_intercept_z", has_intercept_z); - vector omega_int(has_intercept_z, 0.0); - stan::math::initialize(omega_int, std::numeric_limits::quiet_NaN()); - stan::math::fill(omega_int,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - current_statement_begin__ = 1236; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 1237; - if (as_bool(dense_X)) { - current_statement_begin__ = 1237; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - current_statement_begin__ = 1238; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - current_statement_begin__ = 1240; - if (as_bool(logical_eq(has_intercept_z,1))) { - - current_statement_begin__ = 1241; - stan::math::assign(get_base1_lhs(omega_int,1,"omega_int",1), (get_base1(gamma_z,1,"gamma_z",1) - dot_product(zbar,omega))); - } - { - validate_non_negative_index("eta_z", "N", N); - vector_d eta_z(static_cast(N)); - (void) eta_z; // dummy to suppress unused var warning - - stan::math::initialize(eta_z, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_z,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 1247; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 1248; - if (as_bool(dense_X)) { - current_statement_begin__ = 1248; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 1249; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 1251; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 1252; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 1252; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 1253; - if (as_bool(K_smooth)) { - current_statement_begin__ = 1253; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 1254; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 1256; - if (as_bool(special_case)) { - current_statement_begin__ = 1256; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 1256; - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - current_statement_begin__ = 1257; - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - current_statement_begin__ = 1259; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 1260; - if (as_bool((primitive_value(logical_eq(make_lower(family,link, pstream__),stan::math::negative_infinity())) && primitive_value(logical_eq(make_upper(family,link, pstream__),stan::math::positive_infinity()))))) { - current_statement_begin__ = 1261; - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,5))))) { - { - double max_eta(0.0); - (void) max_eta; // dummy to suppress unused var warning - - stan::math::initialize(max_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(max_eta,DUMMY_VAR__); - - - current_statement_begin__ = 1264; - stan::math::assign(max_eta, max(eta)); - current_statement_begin__ = 1265; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - max_eta)); - current_statement_begin__ = 1266; - stan::math::assign(eta, add(subtract(eta,max_eta),get_base1(gamma,1,"gamma",1))); - } - } else { - { - double min_eta(0.0); - (void) min_eta; // dummy to suppress unused var warning - - stan::math::initialize(min_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(min_eta,DUMMY_VAR__); - stan::math::assign(min_eta,min(eta)); - - - current_statement_begin__ = 1270; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - min_eta)); - current_statement_begin__ = 1271; - stan::math::assign(eta, add(subtract(eta,min_eta),get_base1(gamma,1,"gamma",1))); - } - } - } else { - - current_statement_begin__ = 1277; - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - current_statement_begin__ = 1281; - if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(z_dim,0)))) && primitive_value(logical_gt(link_phi,0))))) { - - current_statement_begin__ = 1282; - stan::math::assign(eta_z, multiply(betareg_z,omega)); - } else if (as_bool((primitive_value((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(z_dim,0)))) && primitive_value(logical_eq(has_intercept_z,1))))) { - - current_statement_begin__ = 1285; - stan::math::assign(eta_z, rep_vector(0.0,N)); - } - current_statement_begin__ = 1288; - if (as_bool(logical_eq(has_intercept_z,1))) { - - current_statement_begin__ = 1289; - if (as_bool(logical_gt(link_phi,1))) { - - current_statement_begin__ = 1290; - stan::math::assign(get_base1_lhs(omega_int,1,"omega_int",1), (get_base1(omega_int,1,"omega_int",1) - min(eta_z))); - current_statement_begin__ = 1291; - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),get_base1(gamma_z,1,"gamma_z",1))); - } else { - - current_statement_begin__ = 1294; - stan::math::assign(eta_z, add(eta_z,get_base1(gamma_z,1,"gamma_z",1))); - } - } else { - - current_statement_begin__ = 1299; - if (as_bool(logical_gt(link_phi,1))) { - - current_statement_begin__ = 1300; - stan::math::assign(eta_z, add(subtract(eta_z,min(eta_z)),dot_product(zbar,omega))); - } else { - - current_statement_begin__ = 1303; - stan::math::assign(eta_z, add(eta_z,dot_product(zbar,omega))); - } - } - current_statement_begin__ = 1307; - if (as_bool(logical_gt(SSfun,0))) { - { - validate_non_negative_index("eta_nlmer", "len_y", len_y); - vector_d eta_nlmer(static_cast(len_y)); - (void) eta_nlmer; // dummy to suppress unused var warning - - stan::math::initialize(eta_nlmer, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_nlmer,DUMMY_VAR__); - validate_non_negative_index("P", "len_y", len_y); - validate_non_negative_index("P", "K", K); - matrix_d P(static_cast(len_y),static_cast(K)); - (void) P; // dummy to suppress unused var warning - - stan::math::initialize(P, std::numeric_limits::quiet_NaN()); - stan::math::fill(P,DUMMY_VAR__); - - - current_statement_begin__ = 1310; - stan::math::assign(P, reshape_vec(eta,len_y,K, pstream__)); - current_statement_begin__ = 1311; - if (as_bool(logical_lt(SSfun,5))) { - - current_statement_begin__ = 1312; - if (as_bool(logical_lte(SSfun,2))) { - - current_statement_begin__ = 1313; - if (as_bool(logical_eq(SSfun,1))) { - current_statement_begin__ = 1313; - stan::math::assign(eta_nlmer, SS_asymp(input,P, pstream__)); - } else { - current_statement_begin__ = 1314; - stan::math::assign(eta_nlmer, SS_asympOff(input,P, pstream__)); - } - } else if (as_bool(logical_eq(SSfun,3))) { - current_statement_begin__ = 1316; - stan::math::assign(eta_nlmer, SS_asympOrig(input,P, pstream__)); - } else { - current_statement_begin__ = 1317; - stan::math::assign(eta_nlmer, SS_biexp(input,P, pstream__)); - } - } else { - - current_statement_begin__ = 1320; - if (as_bool(logical_lte(SSfun,7))) { - - current_statement_begin__ = 1321; - if (as_bool(logical_eq(SSfun,5))) { - current_statement_begin__ = 1321; - stan::math::assign(eta_nlmer, SS_fol(Dose,input,P, pstream__)); - } else if (as_bool(logical_eq(SSfun,6))) { - current_statement_begin__ = 1322; - stan::math::assign(eta_nlmer, SS_fpl(input,P, pstream__)); - } else { - current_statement_begin__ = 1323; - stan::math::assign(eta_nlmer, SS_gompertz(input,P, pstream__)); - } - } else { - - current_statement_begin__ = 1326; - if (as_bool(logical_eq(SSfun,8))) { - current_statement_begin__ = 1326; - stan::math::assign(eta_nlmer, SS_logis(input,P, pstream__)); - } else if (as_bool(logical_eq(SSfun,9))) { - current_statement_begin__ = 1327; - stan::math::assign(eta_nlmer, SS_micmen(input,P, pstream__)); - } else { - current_statement_begin__ = 1328; - stan::math::assign(eta_nlmer, SS_weibull(input,P, pstream__)); - } - } - } - current_statement_begin__ = 1331; - for (int n = 1; n <= len_y; ++n) { - current_statement_begin__ = 1331; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta_nlmer,n,"eta_nlmer",1),aux, base_rng__))); - } - } - } else if (as_bool(logical_eq(family,1))) { - - current_statement_begin__ = 1334; - if (as_bool(logical_gt(link,1))) { - current_statement_begin__ = 1334; - stan::math::assign(eta, linkinv_gauss(eta,link, pstream__)); - } - current_statement_begin__ = 1335; - for (int n = 1; n <= len_y; ++n) { - current_statement_begin__ = 1335; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta,n,"eta",1),aux, base_rng__))); - } - } else if (as_bool(logical_eq(family,2))) { - - current_statement_begin__ = 1338; - if (as_bool(logical_gt(link,1))) { - current_statement_begin__ = 1338; - stan::math::assign(eta, linkinv_gamma(eta,link, pstream__)); - } - current_statement_begin__ = 1339; - for (int n = 1; n <= len_y; ++n) { - current_statement_begin__ = 1339; - stan::math::assign(mean_PPD, (mean_PPD + gamma_rng(aux,(aux / get_base1(eta,n,"eta",1)), base_rng__))); - } - } else if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 1342; - if (as_bool(logical_gt(link,1))) { - current_statement_begin__ = 1342; - stan::math::assign(eta, linkinv_inv_gaussian(eta,link, pstream__)); - } - current_statement_begin__ = 1343; - for (int n = 1; n <= len_y; ++n) { - current_statement_begin__ = 1343; - stan::math::assign(mean_PPD, (mean_PPD + inv_gaussian_rng(get_base1(eta,n,"eta",1),aux, base_rng__, pstream__))); - } - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link_phi,0))))) { - - current_statement_begin__ = 1346; - stan::math::assign(eta, linkinv_beta(eta,link, pstream__)); - current_statement_begin__ = 1347; - for (int n = 1; n <= N; ++n) { - { - double eta_n(0.0); - (void) eta_n; // dummy to suppress unused var warning - - stan::math::initialize(eta_n, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_n,DUMMY_VAR__); - stan::math::assign(eta_n,get_base1(eta,n,"eta",1)); - - - current_statement_begin__ = 1349; - if (as_bool(logical_lte(aux,0))) { - current_statement_begin__ = 1349; - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(0.5, base_rng__))); - } else if (as_bool(logical_gte(eta_n,1))) { - current_statement_begin__ = 1350; - stan::math::assign(mean_PPD, (mean_PPD + 1)); - } else if (as_bool(logical_gt(eta_n,0))) { - current_statement_begin__ = 1352; - stan::math::assign(mean_PPD, (mean_PPD + beta_rng((get_base1(eta,n,"eta",1) * aux),((1 - get_base1(eta,n,"eta",1)) * aux), base_rng__))); - } - } - } - } else if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_gt(link_phi,0))))) { - - current_statement_begin__ = 1356; - stan::math::assign(eta, linkinv_beta(eta,link, pstream__)); - current_statement_begin__ = 1357; - stan::math::assign(eta_z, linkinv_beta_z(eta_z,link_phi, pstream__)); - current_statement_begin__ = 1358; - for (int n = 1; n <= N; ++n) { - { - double eta_n(0.0); - (void) eta_n; // dummy to suppress unused var warning - - stan::math::initialize(eta_n, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta_n,DUMMY_VAR__); - stan::math::assign(eta_n,get_base1(eta,n,"eta",1)); - double aux_n(0.0); - (void) aux_n; // dummy to suppress unused var warning - - stan::math::initialize(aux_n, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux_n,DUMMY_VAR__); - stan::math::assign(aux_n,get_base1(eta_z,n,"eta_z",1)); - - - current_statement_begin__ = 1361; - if (as_bool(logical_lte(aux_n,0))) { - current_statement_begin__ = 1361; - stan::math::assign(mean_PPD, (mean_PPD + bernoulli_rng(0.5, base_rng__))); - } else if (as_bool(logical_gte(eta_n,1))) { - current_statement_begin__ = 1362; - stan::math::assign(mean_PPD, (mean_PPD + 1)); - } else if (as_bool(logical_gt(eta_n,0))) { - current_statement_begin__ = 1364; - stan::math::assign(mean_PPD, (mean_PPD + beta_rng((eta_n * aux_n),((1 - eta_n) * aux_n), base_rng__))); - } - } - } - } - current_statement_begin__ = 1367; - stan::math::assign(mean_PPD, (mean_PPD / len_y)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - for (int k_0__ = 0; k_0__ < has_intercept_z; ++k_0__) { - vars__.push_back(omega_int[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_continuous"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "S_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist_z,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= z_dim; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega_int" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist_z,7) ? sum(num_normals_z) : z_dim ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= z_dim; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist_z,5)) || primitive_value(logical_eq(prior_dist_z,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "S_z" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist_z,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda_z" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= z_dim; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= has_intercept_z; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "omega_int" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_count_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_count"); - reader.add_event(735, 735, "end", "model_count"); - return reader; -} - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 52; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 54; - if (as_bool(logical_eq(nc,1))) { - - current_statement_begin__ = 55; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - current_statement_begin__ = 57; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - current_statement_begin__ = 65; - stan::math::assign(pi, divide(pi,sum(pi))); - current_statement_begin__ = 68; - stan::math::assign(zeta_mark, (zeta_mark + nc)); - current_statement_begin__ = 69; - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - current_statement_begin__ = 70; - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - current_statement_begin__ = 73; - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - current_statement_begin__ = 74; - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - current_statement_begin__ = 75; - stan::math::assign(rho_mark, (rho_mark + 1)); - current_statement_begin__ = 76; - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - current_statement_begin__ = 77; - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - current_statement_begin__ = 79; - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - current_statement_begin__ = 83; - stan::math::assign(z_T_mark, (z_T_mark + r)); - current_statement_begin__ = 84; - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - current_statement_begin__ = 85; - for (int c = 1; c <= r; ++c) { - current_statement_begin__ = 85; - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - current_statement_begin__ = 86; - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - current_statement_begin__ = 87; - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - current_statement_begin__ = 91; - for (int c = 1; c <= nc; ++c) { - current_statement_begin__ = 91; - for (int r = c; r <= nc; ++r) { - - current_statement_begin__ = 92; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - current_statement_begin__ = 93; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - current_statement_begin__ = 97; - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 115; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 117; - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - current_statement_begin__ = 119; - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - current_statement_begin__ = 120; - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - current_statement_begin__ = 121; - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - current_statement_begin__ = 122; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - current_statement_begin__ = 126; - for (int c = 1; c <= nc; ++c) { - - current_statement_begin__ = 127; - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 128; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - current_statement_begin__ = 129; - for (int r = (c + 1); r <= nc; ++r) { - - current_statement_begin__ = 130; - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 131; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - current_statement_begin__ = 134; - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - current_statement_begin__ = 136; - stan::math::assign(b_mark, (b_mark - 1)); - current_statement_begin__ = 137; - for (int s = 1; s <= nc; ++s) { - current_statement_begin__ = 137; - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - current_statement_begin__ = 138; - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - current_statement_begin__ = 142; - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - current_statement_begin__ = 165; - lp_accum__.add(normal_log(z_b,0,1)); - current_statement_begin__ = 166; - lp_accum__.add(normal_log(z_T,0,1)); - current_statement_begin__ = 167; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 167; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - current_statement_begin__ = 171; - stan::math::assign(pos_reg, (pos_reg + 1)); - current_statement_begin__ = 172; - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - current_statement_begin__ = 173; - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - current_statement_begin__ = 174; - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - current_statement_begin__ = 175; - stan::math::assign(nu, (nu - 0.5)); - current_statement_begin__ = 176; - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - current_statement_begin__ = 177; - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - current_statement_begin__ = 179; - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - current_statement_begin__ = 180; - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - current_statement_begin__ = 182; - lp_accum__.add(gamma_log(zeta,delta,1)); - current_statement_begin__ = 183; - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - current_statement_begin__ = 200; - stan::math::assign(K, rows(z_beta)); - current_statement_begin__ = 201; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 201; - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - current_statement_begin__ = 202; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 218; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - current_statement_begin__ = 233; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 233; - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - current_statement_begin__ = 234; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - current_statement_begin__ = 256; - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - current_statement_begin__ = 271; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 271; - for (int j = 1; j <= N; ++j) { - current_statement_begin__ = 271; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 272; - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - current_statement_begin__ = 273; - stan::math::assign(pos, (pos + 1)); - } - } - } - current_statement_begin__ = 275; - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_count(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 288; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 288; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 289; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 290; - return stan::math::promote_scalar(square(eta)); - } else { - current_statement_begin__ = 291; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 291; - current_statement_begin__ = 292; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_count_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_count(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_pois(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 306; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 307; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 307; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log_log(get_base1(y,n,"y",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,3))) { - { - validate_non_negative_index("phi", "N", N); - Eigen::Matrix phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, std::numeric_limits::quiet_NaN()); - stan::math::fill(phi,DUMMY_VAR__); - stan::math::assign(phi,linkinv_count(eta,link, pstream__)); - - - current_statement_begin__ = 310; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 310; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log(get_base1(y,n,"y",1),get_base1(phi,n,"phi",1))); - } - } - } else { - current_statement_begin__ = 312; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 312; - current_statement_begin__ = 313; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_pois_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_pois(y, eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_nb(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("rho", "N", N); - Eigen::Matrix rho(static_cast(N)); - (void) rho; // dummy to suppress unused var warning - - stan::math::initialize(rho, std::numeric_limits::quiet_NaN()); - stan::math::fill(rho,DUMMY_VAR__); - stan::math::assign(rho,linkinv_count(eta,link, pstream__)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 329; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 329; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), neg_binomial_2_log(get_base1(y,n,"y",1),get_base1(rho,n,"rho",1),theta)); - } - current_statement_begin__ = 330; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_nb_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) const { - return pw_nb(y, eta, theta, link, pstream__); - } -}; - -class model_count : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - vector y; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - vector_d prior_scale; - double prior_scale_for_intercept; - double prior_scale_for_aux; - vector_d prior_scale_for_smooth; - vector_d prior_mean; - double prior_mean_for_intercept; - double prior_mean_for_aux; - vector_d prior_mean_for_smooth; - vector_d prior_df; - double prior_df_for_intercept; - double prior_df_for_aux; - vector_d prior_df_for_smooth; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int t; - vector p; - vector l; - int q; - int len_theta_L; - vector_d shape; - vector_d scale; - int len_concentration; - vector concentration; - int len_regularization; - vector regularization; - int num_non_zero; - vector_d w; - vector v; - vector u; - int special_case; - double poisson_max; - vector > V; - int len_z_T; - int len_var_group; - int len_rho; - int is_continuous; - int pos; - vector delta; - int hs; -public: - model_count(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_count(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_count_namespace::model_count"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y", "N", N); - context__.validate_dims("data initialization", "y", "int", context__.to_vec(N)); - validate_non_negative_index("y", "N", N); - y = std::vector(N,int(0)); - vals_i__ = context__.vals_i("y"); - pos__ = 0; - size_t y_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < y_limit_0__; ++i_0__) { - y[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_scale_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_scale_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_scale_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_scale_for_smooth"); - pos__ = 0; - size_t prior_scale_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_scale_for_smooth_i_vec_lim__; ++i_vec__) { - prior_scale_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_mean_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_mean_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_mean_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_mean_for_smooth"); - pos__ = 0; - size_t prior_mean_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_mean_for_smooth_i_vec_lim__; ++i_vec__) { - prior_mean_for_smooth[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - context__.validate_dims("data initialization", "prior_df_for_smooth", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - validate_non_negative_index("prior_df_for_smooth", "(logical_gt(K_smooth,0) ? max(smooth_map) : 0 )", (logical_gt(K_smooth,0) ? max(smooth_map) : 0 )); - prior_df_for_smooth = vector_d(static_cast((logical_gt(K_smooth,0) ? max(smooth_map) : 0 ))); - vals_r__ = context__.vals_r("prior_df_for_smooth"); - pos__ = 0; - size_t prior_df_for_smooth_i_vec_lim__ = (logical_gt(K_smooth,0) ? max(smooth_map) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < prior_df_for_smooth_i_vec_lim__; ++i_vec__) { - prior_df_for_smooth[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "t", "int", context__.to_vec()); - t = int(0); - vals_i__ = context__.vals_i("t"); - pos__ = 0; - t = vals_i__[pos__++]; - validate_non_negative_index("p", "t", t); - context__.validate_dims("data initialization", "p", "int", context__.to_vec(t)); - validate_non_negative_index("p", "t", t); - p = std::vector(t,int(0)); - vals_i__ = context__.vals_i("p"); - pos__ = 0; - size_t p_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < p_limit_0__; ++i_0__) { - p[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("l", "t", t); - context__.validate_dims("data initialization", "l", "int", context__.to_vec(t)); - validate_non_negative_index("l", "t", t); - l = std::vector(t,int(0)); - vals_i__ = context__.vals_i("l"); - pos__ = 0; - size_t l_limit_0__ = t; - for (size_t i_0__ = 0; i_0__ < l_limit_0__; ++i_0__) { - l[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "q", "int", context__.to_vec()); - q = int(0); - vals_i__ = context__.vals_i("q"); - pos__ = 0; - q = vals_i__[pos__++]; - context__.validate_dims("data initialization", "len_theta_L", "int", context__.to_vec()); - len_theta_L = int(0); - vals_i__ = context__.vals_i("len_theta_L"); - pos__ = 0; - len_theta_L = vals_i__[pos__++]; - validate_non_negative_index("shape", "t", t); - context__.validate_dims("data initialization", "shape", "vector_d", context__.to_vec(t)); - validate_non_negative_index("shape", "t", t); - shape = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - size_t shape_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < shape_i_vec_lim__; ++i_vec__) { - shape[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("scale", "t", t); - context__.validate_dims("data initialization", "scale", "vector_d", context__.to_vec(t)); - validate_non_negative_index("scale", "t", t); - scale = vector_d(static_cast(t)); - vals_r__ = context__.vals_r("scale"); - pos__ = 0; - size_t scale_i_vec_lim__ = t; - for (size_t i_vec__ = 0; i_vec__ < scale_i_vec_lim__; ++i_vec__) { - scale[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_concentration", "int", context__.to_vec()); - len_concentration = int(0); - vals_i__ = context__.vals_i("len_concentration"); - pos__ = 0; - len_concentration = vals_i__[pos__++]; - validate_non_negative_index("concentration", "len_concentration", len_concentration); - context__.validate_dims("data initialization", "concentration", "double", context__.to_vec(len_concentration)); - validate_non_negative_index("concentration", "len_concentration", len_concentration); - concentration = std::vector(len_concentration,double(0)); - vals_r__ = context__.vals_r("concentration"); - pos__ = 0; - size_t concentration_limit_0__ = len_concentration; - for (size_t i_0__ = 0; i_0__ < concentration_limit_0__; ++i_0__) { - concentration[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "len_regularization", "int", context__.to_vec()); - len_regularization = int(0); - vals_i__ = context__.vals_i("len_regularization"); - pos__ = 0; - len_regularization = vals_i__[pos__++]; - validate_non_negative_index("regularization", "len_regularization", len_regularization); - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec(len_regularization)); - validate_non_negative_index("regularization", "len_regularization", len_regularization); - regularization = std::vector(len_regularization,double(0)); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - size_t regularization_limit_0__ = len_regularization; - for (size_t i_0__ = 0; i_0__ < regularization_limit_0__; ++i_0__) { - regularization[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "num_non_zero", "int", context__.to_vec()); - num_non_zero = int(0); - vals_i__ = context__.vals_i("num_non_zero"); - pos__ = 0; - num_non_zero = vals_i__[pos__++]; - validate_non_negative_index("w", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec(num_non_zero)); - validate_non_negative_index("w", "num_non_zero", num_non_zero); - w = vector_d(static_cast(num_non_zero)); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = num_non_zero; - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "num_non_zero", num_non_zero); - context__.validate_dims("data initialization", "v", "int", context__.to_vec(num_non_zero)); - validate_non_negative_index("v", "num_non_zero", num_non_zero); - v = std::vector(num_non_zero,int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = num_non_zero; - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_gt(t,0) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_gt(t,0) ? (N + 1) : 0 )", (logical_gt(t,0) ? (N + 1) : 0 )); - u = std::vector((logical_gt(t,0) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_gt(t,0) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "special_case", "int", context__.to_vec()); - special_case = int(0); - vals_i__ = context__.vals_i("special_case"); - pos__ = 0; - special_case = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"y[k0__]",y[k0__],0); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_smooth",prior_scale_for_smooth,0); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_mean_for_smooth",prior_mean_for_smooth,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_smooth",prior_df_for_smooth,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"t",t,0); - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"p[k0__]",p[k0__],1); - } - for (int k0__ = 0; k0__ < t; ++k0__) { - check_greater_or_equal(function__,"l[k0__]",l[k0__],1); - } - check_greater_or_equal(function__,"q",q,0); - check_greater_or_equal(function__,"len_theta_L",len_theta_L,0); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"scale",scale,0); - check_greater_or_equal(function__,"len_concentration",len_concentration,0); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"concentration[k0__]",concentration[k0__],0); - } - check_greater_or_equal(function__,"len_regularization",len_regularization,0); - for (int k0__ = 0; k0__ < len_regularization; ++k0__) { - check_greater_or_equal(function__,"regularization[k0__]",regularization[k0__],0); - } - check_greater_or_equal(function__,"num_non_zero",num_non_zero,0); - for (int k0__ = 0; k0__ < num_non_zero; ++k0__) { - check_greater_or_equal(function__,"v[k0__]",v[k0__],0); - } - for (int k0__ = 0; k0__ < (logical_gt(t,0) ? (N + 1) : 0 ); ++k0__) { - check_greater_or_equal(function__,"u[k0__]",u[k0__],0); - } - check_greater_or_equal(function__,"special_case",special_case,0); - check_less_or_equal(function__,"special_case",special_case,1); - // initialize data variables - poisson_max = double(0); - stan::math::fill(poisson_max,DUMMY_VAR__); - stan::math::assign(poisson_max,pow(2.0,30.0)); - validate_non_negative_index("V", "(special_case ? t : 0 )", (special_case ? t : 0 )); - validate_non_negative_index("V", "N", N); - V = std::vector >((special_case ? t : 0 ),std::vector(N,int(0))); - stan::math::fill(V, std::numeric_limits::min()); - stan::math::assign(V,make_V(N,(special_case ? t : 0 ),v, pstream__)); - len_z_T = int(0); - stan::math::fill(len_z_T, std::numeric_limits::min()); - stan::math::assign(len_z_T,0); - len_var_group = int(0); - stan::math::fill(len_var_group, std::numeric_limits::min()); - stan::math::assign(len_var_group,(sum(p) * logical_gt(t,0))); - len_rho = int(0); - stan::math::fill(len_rho, std::numeric_limits::min()); - stan::math::assign(len_rho,(sum(p) - t)); - is_continuous = int(0); - stan::math::fill(is_continuous, std::numeric_limits::min()); - stan::math::assign(is_continuous,0); - pos = int(0); - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - validate_non_negative_index("delta", "len_concentration", len_concentration); - delta = std::vector(len_concentration,double(0)); - stan::math::fill(delta,DUMMY_VAR__); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - - try { - current_statement_begin__ = 439; - if (as_bool(logical_lte(prior_dist,2))) { - current_statement_begin__ = 439; - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - current_statement_begin__ = 440; - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - current_statement_begin__ = 441; - stan::math::assign(hs, 4); - } else { - current_statement_begin__ = 442; - stan::math::assign(hs, 0); - } - current_statement_begin__ = 444; - stan::math::assign(pos, 1); - current_statement_begin__ = 445; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 446; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - - current_statement_begin__ = 447; - for (int j = 1; j <= get_base1(p,i,"p",1); ++j) { - - current_statement_begin__ = 448; - stan::math::assign(get_base1_lhs(delta,pos,"delta",1), get_base1(concentration,j,"concentration",1)); - current_statement_begin__ = 449; - stan::math::assign(pos, (pos + 1)); - } - } - current_statement_begin__ = 452; - for (int j = 3; j <= get_base1(p,i,"p",1); ++j) { - current_statement_begin__ = 452; - stan::math::assign(len_z_T, ((len_z_T + get_base1(p,i,"p",1)) - 1)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - for (int k0__ = 0; k0__ < (special_case ? t : 0 ); ++k0__) { - for (int k1__ = 0; k1__ < N; ++k1__) { - check_greater_or_equal(function__,"V[k0__][k1__]",V[k0__][k1__],1); - } - } - check_greater_or_equal(function__,"len_z_T",len_z_T,0); - check_greater_or_equal(function__,"len_var_group",len_var_group,0); - check_greater_or_equal(function__,"len_rho",len_rho,0); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"pos",pos,1); - for (int k0__ = 0; k0__ < len_concentration; ++k0__) { - check_greater_or_equal(function__,"delta[k0__]",delta[k0__],0); - } - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - num_params_r__ += (logical_eq(prior_dist,7) ? sum(num_normals) : K ); - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - num_params_r__ += K_smooth; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - num_params_r__ += (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - validate_non_negative_index("z_b", "q", q); - num_params_r__ += q; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - num_params_r__ += len_z_T; - validate_non_negative_index("rho", "len_rho", len_rho); - num_params_r__ += len_rho; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - num_params_r__ += len_concentration; - validate_non_negative_index("tau", "t", t); - num_params_r__ += t; - validate_non_negative_index("aux_unscaled", "logical_gt(family,1)", logical_gt(family,1)); - num_params_r__ += logical_gt(family,1); - validate_non_negative_index("noise", "N", N); - validate_non_negative_index("noise", "logical_eq(family,3)", logical_eq(family,3)); - num_params_r__ += N * logical_eq(family,3); - } - - ~model_count() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_lb_unconstrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "(logical_eq(prior_dist,7) ? sum(num_normals) : K )", (logical_eq(prior_dist,7) ? sum(num_normals) : K )); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - // generate_declaration z_beta - vector_d z_beta(static_cast((logical_eq(prior_dist,7) ? sum(num_normals) : K ))); - for (int j1__ = 0U; j1__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("z_beta_smooth"))) - throw std::runtime_error("variable z_beta_smooth missing"); - vals_r__ = context__.vals_r("z_beta_smooth"); - pos__ = 0U; - validate_non_negative_index("z_beta_smooth", "K_smooth", K_smooth); - context__.validate_dims("initialization", "z_beta_smooth", "vector_d", context__.to_vec(K_smooth)); - // generate_declaration z_beta_smooth - vector_d z_beta_smooth(static_cast(K_smooth)); - for (int j1__ = 0U; j1__ < K_smooth; ++j1__) - z_beta_smooth(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta_smooth); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta_smooth: ") + e.what()); - } - - if (!(context__.contains_r("smooth_sd_raw"))) - throw std::runtime_error("variable smooth_sd_raw missing"); - vals_r__ = context__.vals_r("smooth_sd_raw"); - pos__ = 0U; - validate_non_negative_index("smooth_sd_raw", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - context__.validate_dims("initialization", "smooth_sd_raw", "vector_d", context__.to_vec((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - // generate_declaration smooth_sd_raw - vector_d smooth_sd_raw(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - for (int j1__ = 0U; j1__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++j1__) - smooth_sd_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,smooth_sd_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable smooth_sd_raw: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - if (!(context__.contains_r("z_b"))) - throw std::runtime_error("variable z_b missing"); - vals_r__ = context__.vals_r("z_b"); - pos__ = 0U; - validate_non_negative_index("z_b", "q", q); - context__.validate_dims("initialization", "z_b", "vector_d", context__.to_vec(q)); - // generate_declaration z_b - vector_d z_b(static_cast(q)); - for (int j1__ = 0U; j1__ < q; ++j1__) - z_b(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_b); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_b: ") + e.what()); - } - - if (!(context__.contains_r("z_T"))) - throw std::runtime_error("variable z_T missing"); - vals_r__ = context__.vals_r("z_T"); - pos__ = 0U; - validate_non_negative_index("z_T", "len_z_T", len_z_T); - context__.validate_dims("initialization", "z_T", "vector_d", context__.to_vec(len_z_T)); - // generate_declaration z_T - vector_d z_T(static_cast(len_z_T)); - for (int j1__ = 0U; j1__ < len_z_T; ++j1__) - z_T(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_T); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_T: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "len_rho", len_rho); - context__.validate_dims("initialization", "rho", "vector_d", context__.to_vec(len_rho)); - // generate_declaration rho - vector_d rho(static_cast(len_rho)); - for (int j1__ = 0U; j1__ < len_rho; ++j1__) - rho(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lub_unconstrain(0,1,rho); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("zeta"))) - throw std::runtime_error("variable zeta missing"); - vals_r__ = context__.vals_r("zeta"); - pos__ = 0U; - validate_non_negative_index("zeta", "len_concentration", len_concentration); - context__.validate_dims("initialization", "zeta", "vector_d", context__.to_vec(len_concentration)); - // generate_declaration zeta - vector_d zeta(static_cast(len_concentration)); - for (int j1__ = 0U; j1__ < len_concentration; ++j1__) - zeta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,zeta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable zeta: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - validate_non_negative_index("tau", "t", t); - context__.validate_dims("initialization", "tau", "vector_d", context__.to_vec(t)); - // generate_declaration tau - vector_d tau(static_cast(t)); - for (int j1__ = 0U; j1__ < t; ++j1__) - tau(j1__) = vals_r__[pos__++]; - try { - writer__.vector_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - if (!(context__.contains_r("aux_unscaled"))) - throw std::runtime_error("variable aux_unscaled missing"); - vals_r__ = context__.vals_r("aux_unscaled"); - pos__ = 0U; - validate_non_negative_index("aux_unscaled", "logical_gt(family,1)", logical_gt(family,1)); - context__.validate_dims("initialization", "aux_unscaled", "double", context__.to_vec(logical_gt(family,1))); - // generate_declaration aux_unscaled - std::vector aux_unscaled(logical_gt(family,1),double(0)); - for (int i0__ = 0U; i0__ < logical_gt(family,1); ++i0__) - aux_unscaled[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_gt(family,1); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,aux_unscaled[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable aux_unscaled: ") + e.what()); - } - - if (!(context__.contains_r("noise"))) - throw std::runtime_error("variable noise missing"); - vals_r__ = context__.vals_r("noise"); - pos__ = 0U; - validate_non_negative_index("noise", "logical_eq(family,3)", logical_eq(family,3)); - validate_non_negative_index("noise", "N", N); - context__.validate_dims("initialization", "noise", "vector_d", context__.to_vec(logical_eq(family,3),N)); - // generate_declaration noise - std::vector noise(logical_eq(family,3),vector_d(static_cast(N))); - for (int j1__ = 0U; j1__ < N; ++j1__) - for (int i0__ = 0U; i0__ < logical_eq(family,3); ++i0__) - noise[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(family,3); ++i0__) - try { - writer__.vector_lb_unconstrain(0,noise[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable noise: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_lb_constrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ),lp__)); - else - gamma.push_back(in__.scalar_lb_constrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K ),lp__); - else - z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - - Eigen::Matrix z_beta_smooth; - (void) z_beta_smooth; // dummy to suppress unused var warning - if (jacobian__) - z_beta_smooth = in__.vector_constrain(K_smooth,lp__); - else - z_beta_smooth = in__.vector_constrain(K_smooth); - - Eigen::Matrix smooth_sd_raw; - (void) smooth_sd_raw; // dummy to suppress unused var warning - if (jacobian__) - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ),lp__); - else - smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - Eigen::Matrix z_b; - (void) z_b; // dummy to suppress unused var warning - if (jacobian__) - z_b = in__.vector_constrain(q,lp__); - else - z_b = in__.vector_constrain(q); - - Eigen::Matrix z_T; - (void) z_T; // dummy to suppress unused var warning - if (jacobian__) - z_T = in__.vector_constrain(len_z_T,lp__); - else - z_T = in__.vector_constrain(len_z_T); - - Eigen::Matrix rho; - (void) rho; // dummy to suppress unused var warning - if (jacobian__) - rho = in__.vector_lub_constrain(0,1,len_rho,lp__); - else - rho = in__.vector_lub_constrain(0,1,len_rho); - - Eigen::Matrix zeta; - (void) zeta; // dummy to suppress unused var warning - if (jacobian__) - zeta = in__.vector_lb_constrain(0,len_concentration,lp__); - else - zeta = in__.vector_lb_constrain(0,len_concentration); - - Eigen::Matrix tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.vector_lb_constrain(0,t,lp__); - else - tau = in__.vector_lb_constrain(0,t); - - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = logical_gt(family,1); - aux_unscaled.reserve(dim_aux_unscaled_0__); - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - if (jacobian__) - aux_unscaled.push_back(in__.scalar_lb_constrain(0,lp__)); - else - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - - vector > noise; - size_t dim_noise_0__ = logical_eq(family,3); - noise.reserve(dim_noise_0__); - for (size_t k_0__ = 0; k_0__ < dim_noise_0__; ++k_0__) { - if (jacobian__) - noise.push_back(in__.vector_lb_constrain(0,N,lp__)); - else - noise.push_back(in__.vector_lb_constrain(0,N)); - } - - - // transformed parameters - T__ aux; - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, DUMMY_VAR__); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::negative_infinity()); - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - Eigen::Matrix beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, DUMMY_VAR__); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - Eigen::Matrix smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, DUMMY_VAR__); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - Eigen::Matrix b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, DUMMY_VAR__); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, DUMMY_VAR__); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 483; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 483; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 484; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 485; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 486; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 489; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 490; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 491; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 494; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 495; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 496; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 499; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 501; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 504; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 505; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 506; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 507; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 508; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 509; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 511; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 515; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 516; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 517; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 517; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 518; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 521; - if (as_bool((primitive_value(logical_gt(family,1)) && primitive_value((primitive_value(logical_eq(prior_dist_for_aux,0)) || primitive_value(logical_lte(prior_scale_for_aux,0))))))) { - current_statement_begin__ = 522; - stan::math::assign(aux, get_base1(aux_unscaled,1,"aux_unscaled",1)); - } else if (as_bool(logical_gt(family,1))) { - - current_statement_begin__ = 524; - stan::math::assign(aux, (prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))); - current_statement_begin__ = 525; - if (as_bool(logical_lte(prior_dist_for_aux,2))) { - current_statement_begin__ = 526; - stan::math::assign(aux, (aux + prior_mean_for_aux)); - } - } - current_statement_begin__ = 529; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 530; - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 532; - stan::math::assign(theta_L, elt_multiply(scale,(logical_eq(family,1) ? stan::math::promote_scalar(tau) : stan::math::promote_scalar(multiply(tau,aux)) ))); - current_statement_begin__ = 533; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 533; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 534; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 536; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 537; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 541; - if (as_bool(logical_eq(family,1))) { - current_statement_begin__ = 542; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - } else { - current_statement_begin__ = 545; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - } - current_statement_begin__ = 547; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - if (stan::math::is_uninitialized(aux)) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: aux"; - throw std::runtime_error(msg__.str()); - } - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < K_smooth; ++i0__) { - if (stan::math::is_uninitialized(beta_smooth(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta_smooth" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++i0__) { - if (stan::math::is_uninitialized(smooth_sd(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: smooth_sd" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < q; ++i0__) { - if (stan::math::is_uninitialized(b(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: b" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < len_theta_L; ++i0__) { - if (stan::math::is_uninitialized(theta_L(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta_L" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 554; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 555; - if (as_bool(dense_X)) { - current_statement_begin__ = 555; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 556; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 558; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 559; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 559; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 560; - if (as_bool(K_smooth)) { - current_statement_begin__ = 560; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 561; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 563; - if (as_bool(special_case)) { - current_statement_begin__ = 563; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 563; - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - current_statement_begin__ = 564; - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - current_statement_begin__ = 566; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 567; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 567; - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - current_statement_begin__ = 568; - stan::math::assign(eta, add(subtract(eta,min(eta)),get_base1(gamma,1,"gamma",1))); - } - } else { - - current_statement_begin__ = 573; - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - current_statement_begin__ = 576; - if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 577; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 577; - stan::math::assign(eta, add(add(eta,log(aux)),log(get_base1(noise,1,"noise",1)))); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 578; - stan::math::assign(eta, elt_multiply(multiply(eta,aux),get_base1(noise,1,"noise",1))); - } else { - current_statement_begin__ = 579; - stan::math::assign(eta, add(add(eta,sqrt(aux)),sqrt(get_base1(noise,1,"noise",1)))); - } - } - current_statement_begin__ = 583; - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - - current_statement_begin__ = 584; - if (as_bool(logical_neq(family,2))) { - - current_statement_begin__ = 585; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 585; - lp_accum__.add(poisson_log_log(y,eta)); - } else { - current_statement_begin__ = 586; - lp_accum__.add(poisson_log(y,linkinv_count(eta,link, pstream__))); - } - } else { - - current_statement_begin__ = 589; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 589; - lp_accum__.add(neg_binomial_2_log_log(y,eta,aux)); - } else { - current_statement_begin__ = 590; - lp_accum__.add(neg_binomial_2_log(y,linkinv_count(eta,link, pstream__),aux)); - } - } - } else if (as_bool((primitive_value(logical_neq(family,2)) && primitive_value(logical_eq(prior_PD,0))))) { - current_statement_begin__ = 594; - lp_accum__.add(dot_product(weights,pw_pois(y,eta,link, pstream__))); - } else if (as_bool(logical_eq(prior_PD,0))) { - current_statement_begin__ = 596; - lp_accum__.add(dot_product(weights,pw_nb(y,eta,aux,link, pstream__))); - } - current_statement_begin__ = 599; - if (as_bool((primitive_value((primitive_value(logical_gt(family,1)) && primitive_value(logical_gt(prior_dist_for_aux,0)))) && primitive_value(logical_gt(prior_scale_for_aux,0))))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 602; - if (as_bool(logical_eq(prior_dist_for_aux,1))) { - current_statement_begin__ = 603; - lp_accum__.add((normal_log(aux_unscaled,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_aux,2))) { - current_statement_begin__ = 605; - lp_accum__.add((student_t_log(aux_unscaled,prior_df_for_aux,0,1) - log_half)); - } else { - current_statement_begin__ = 607; - lp_accum__.add(exponential_log(aux_unscaled,1)); - } - } - } - current_statement_begin__ = 613; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 613; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 614; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 617; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 618; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 619; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 620; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 621; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 625; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 626; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 627; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 628; - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - current_statement_begin__ = 630; - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - current_statement_begin__ = 631; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 632; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - current_statement_begin__ = 635; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 636; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - current_statement_begin__ = 639; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 640; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - current_statement_begin__ = 641; - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - current_statement_begin__ = 644; - lp_accum__.add(normal_log(z_beta,0,1)); - } - current_statement_begin__ = 649; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 650; - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - current_statement_begin__ = 651; - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - current_statement_begin__ = 653; - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - current_statement_begin__ = 658; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 659; - lp_accum__.add(normal_log(z_beta_smooth,0,1)); - current_statement_begin__ = 660; - if (as_bool(logical_gt(prior_dist_for_smooth,0))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 662; - if (as_bool(logical_eq(prior_dist_for_smooth,1))) { - current_statement_begin__ = 663; - lp_accum__.add((normal_log(smooth_sd_raw,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,2))) { - current_statement_begin__ = 665; - lp_accum__.add((student_t_log(smooth_sd_raw,prior_df_for_smooth,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_smooth,3))) { - current_statement_begin__ = 667; - lp_accum__.add(exponential_log(smooth_sd_raw,1)); - } - } - } - } - current_statement_begin__ = 672; - if (as_bool(logical_eq(family,3))) { - current_statement_begin__ = 672; - lp_accum__.add(gamma_log(get_base1(noise,1,"noise",1),aux,1)); - } - current_statement_begin__ = 674; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 674; - decov_lp(z_b,z_T,rho,zeta,tau,regularization,delta,shape,t,p, lp__, lp_accum__, pstream__); - } - current_statement_begin__ = 675; - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("z_beta_smooth"); - names__.push_back("smooth_sd_raw"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("one_over_lambda"); - names__.push_back("z_b"); - names__.push_back("z_T"); - names__.push_back("rho"); - names__.push_back("zeta"); - names__.push_back("tau"); - names__.push_back("aux_unscaled"); - names__.push_back("noise"); - names__.push_back("aux"); - names__.push_back("beta"); - names__.push_back("beta_smooth"); - names__.push_back("smooth_sd"); - names__.push_back("b"); - names__.push_back("theta_L"); - names__.push_back("alpha"); - names__.push_back("mean_PPD"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_z_T); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_rho); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_concentration); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(t); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_gt(family,1)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(family,3)); - dims__.push_back(N); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K_smooth); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(q); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(len_theta_L); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_count_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_lb_constrain((logical_eq(link,1) ? stan::math::negative_infinity() : 0.0 ))); - } - vector_d z_beta = in__.vector_constrain((logical_eq(prior_dist,7) ? sum(num_normals) : K )); - vector_d z_beta_smooth = in__.vector_constrain(K_smooth); - vector_d smooth_sd_raw = in__.vector_lb_constrain(0,(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - vector_d z_b = in__.vector_constrain(q); - vector_d z_T = in__.vector_constrain(len_z_T); - vector_d rho = in__.vector_lub_constrain(0,1,len_rho); - vector_d zeta = in__.vector_lb_constrain(0,len_concentration); - vector_d tau = in__.vector_lb_constrain(0,t); - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = logical_gt(family,1); - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - vector noise; - size_t dim_noise_0__ = logical_eq(family,3); - for (size_t k_0__ = 0; k_0__ < dim_noise_0__; ++k_0__) { - noise.push_back(in__.vector_lb_constrain(0,N)); - } - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(z_beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(z_b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_z_T; ++k_0__) { - vars__.push_back(z_T[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_rho; ++k_0__) { - vars__.push_back(rho[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_concentration; ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - for (int k_0__ = 0; k_0__ < t; ++k_0__) { - vars__.push_back(tau[k_0__]); - } - for (int k_0__ = 0; k_0__ < logical_gt(family,1); ++k_0__) { - vars__.push_back(aux_unscaled[k_0__]); - } - for (int k_1__ = 0; k_1__ < N; ++k_1__) { - for (int k_0__ = 0; k_0__ < logical_eq(family,3); ++k_0__) { - vars__.push_back(noise[k_0__][k_1__]); - } - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - double aux(0.0); - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,stan::math::negative_infinity()); - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("beta_smooth", "K_smooth", K_smooth); - vector_d beta_smooth(static_cast(K_smooth)); - (void) beta_smooth; // dummy to suppress unused var warning - - stan::math::initialize(beta_smooth, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta_smooth,DUMMY_VAR__); - validate_non_negative_index("smooth_sd", "(logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,\"smooth_map\",1) : 0 )", (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 )); - vector_d smooth_sd(static_cast((logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ))); - (void) smooth_sd; // dummy to suppress unused var warning - - stan::math::initialize(smooth_sd, std::numeric_limits::quiet_NaN()); - stan::math::fill(smooth_sd,DUMMY_VAR__); - validate_non_negative_index("b", "q", q); - vector_d b(static_cast(q)); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - vector_d theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - - - try { - current_statement_begin__ = 483; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 483; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 484; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 485; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 486; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 489; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 490; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 491; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 494; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 495; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 496; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 499; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 501; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 504; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 505; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 506; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 507; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 508; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 509; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 511; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - current_statement_begin__ = 515; - if (as_bool(K_smooth)) { - - current_statement_begin__ = 516; - stan::math::assign(smooth_sd, add(prior_mean_for_smooth,elt_multiply(prior_scale_for_smooth,smooth_sd_raw))); - current_statement_begin__ = 517; - if (as_bool((primitive_value(is_continuous) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 517; - stan::math::assign(smooth_sd, multiply(smooth_sd,aux)); - } - current_statement_begin__ = 518; - stan::math::assign(beta_smooth, elt_multiply(z_beta_smooth,stan::model::rvalue(smooth_sd, stan::model::cons_list(stan::model::index_multi(smooth_map), stan::model::nil_index_list()), "smooth_sd"))); - } - current_statement_begin__ = 521; - if (as_bool((primitive_value(logical_gt(family,1)) && primitive_value((primitive_value(logical_eq(prior_dist_for_aux,0)) || primitive_value(logical_lte(prior_scale_for_aux,0))))))) { - current_statement_begin__ = 522; - stan::math::assign(aux, get_base1(aux_unscaled,1,"aux_unscaled",1)); - } else if (as_bool(logical_gt(family,1))) { - - current_statement_begin__ = 524; - stan::math::assign(aux, (prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))); - current_statement_begin__ = 525; - if (as_bool(logical_lte(prior_dist_for_aux,2))) { - current_statement_begin__ = 526; - stan::math::assign(aux, (aux + prior_mean_for_aux)); - } - } - current_statement_begin__ = 529; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 530; - if (as_bool(logical_eq(special_case,1))) { - { - int start(0); - (void) start; // dummy to suppress unused var warning - - stan::math::fill(start, std::numeric_limits::min()); - stan::math::assign(start,1); - - - current_statement_begin__ = 532; - stan::math::assign(theta_L, elt_multiply(scale,(logical_eq(family,1) ? stan::math::promote_scalar(tau) : stan::math::promote_scalar(multiply(tau,aux)) ))); - current_statement_begin__ = 533; - if (as_bool(logical_eq(t,1))) { - current_statement_begin__ = 533; - stan::math::assign(b, multiply(get_base1(theta_L,1,"theta_L",1),z_b)); - } else { - current_statement_begin__ = 534; - for (int i = 1; i <= t; ++i) { - { - int end(0); - (void) end; // dummy to suppress unused var warning - - stan::math::fill(end, std::numeric_limits::min()); - stan::math::assign(end,((start + get_base1(l,i,"l",1)) - 1)); - - - current_statement_begin__ = 536; - stan::model::assign(b, - stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), - multiply(get_base1(theta_L,i,"theta_L",1),stan::model::rvalue(z_b, stan::model::cons_list(stan::model::index_min_max(start, end), stan::model::nil_index_list()), "z_b")), - "assigning variable b"); - current_statement_begin__ = 537; - stan::math::assign(start, (end + 1)); - } - } - } - } - } else { - - current_statement_begin__ = 541; - if (as_bool(logical_eq(family,1))) { - current_statement_begin__ = 542; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,1.0,tau,scale,zeta,rho,z_T, pstream__)); - } else { - current_statement_begin__ = 545; - stan::math::assign(theta_L, make_theta_L(len_theta_L,p,aux,tau,scale,zeta,rho,z_T, pstream__)); - } - current_statement_begin__ = 547; - stan::math::assign(b, make_b(z_b,theta_L,p,l, pstream__)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - vars__.push_back(aux); - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < K_smooth; ++k_0__) { - vars__.push_back(beta_smooth[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - vars__.push_back(smooth_sd[k_0__]); - } - for (int k_0__ = 0; k_0__ < q; ++k_0__) { - vars__.push_back(b[k_0__]); - } - for (int k_0__ = 0; k_0__ < len_theta_L; ++k_0__) { - vars__.push_back(theta_L[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - - - try { - current_statement_begin__ = 680; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 681; - if (as_bool(dense_X)) { - current_statement_begin__ = 681; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(xbar,beta))); - } else { - current_statement_begin__ = 682; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), get_base1(gamma,1,"gamma",1)); - } - } - { - validate_non_negative_index("nu", "N", N); - vector_d nu(static_cast(N)); - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 688; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 689; - if (as_bool(dense_X)) { - current_statement_begin__ = 689; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 690; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 692; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 693; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 693; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 694; - if (as_bool(K_smooth)) { - current_statement_begin__ = 694; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 695; - if (as_bool(logical_gt(t,0))) { - - current_statement_begin__ = 697; - if (as_bool(special_case)) { - current_statement_begin__ = 697; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 697; - stan::math::assign(eta, add(eta,stan::model::rvalue(b, stan::model::cons_list(stan::model::index_multi(get_base1(V,i,"V",1)), stan::model::nil_index_list()), "b"))); - } - } else { - current_statement_begin__ = 698; - stan::math::assign(eta, add(eta,csr_matrix_times_vector(N,q,w,v,u,b))); - } - } - current_statement_begin__ = 700; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 701; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 701; - stan::math::assign(eta, add(eta,get_base1(gamma,1,"gamma",1))); - } else { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - current_statement_begin__ = 704; - stan::math::assign(shift, min(eta)); - current_statement_begin__ = 705; - stan::math::assign(eta, add(subtract(eta,shift),get_base1(gamma,1,"gamma",1))); - current_statement_begin__ = 706; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(alpha,1,"alpha",1) - shift)); - } - } - } else { - - current_statement_begin__ = 712; - stan::math::assign(eta, add(eta,dot_product(xbar,beta))); - } - current_statement_begin__ = 715; - if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 716; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 716; - stan::math::assign(eta, add(add(eta,log(aux)),log(get_base1(noise,1,"noise",1)))); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 717; - stan::math::assign(eta, elt_multiply(multiply(eta,aux),get_base1(noise,1,"noise",1))); - } else { - current_statement_begin__ = 718; - stan::math::assign(eta, add(add(eta,sqrt(aux)),sqrt(get_base1(noise,1,"noise",1)))); - } - } - current_statement_begin__ = 720; - stan::math::assign(nu, linkinv_count(eta,link, pstream__)); - current_statement_begin__ = 721; - if (as_bool(logical_neq(family,2))) { - current_statement_begin__ = 721; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 722; - if (as_bool(logical_lt(get_base1(nu,n,"nu",1),poisson_max))) { - current_statement_begin__ = 722; - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(get_base1(nu,n,"nu",1), base_rng__))); - } else { - current_statement_begin__ = 723; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(nu,n,"nu",1),sqrt(get_base1(nu,n,"nu",1)), base_rng__))); - } - } - } else { - current_statement_begin__ = 725; - for (int n = 1; n <= N; ++n) { - { - double gamma_temp(0.0); - (void) gamma_temp; // dummy to suppress unused var warning - - stan::math::initialize(gamma_temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(gamma_temp,DUMMY_VAR__); - - - current_statement_begin__ = 727; - if (as_bool(is_inf(aux))) { - current_statement_begin__ = 727; - stan::math::assign(gamma_temp, get_base1(nu,n,"nu",1)); - } else { - current_statement_begin__ = 728; - stan::math::assign(gamma_temp, gamma_rng(aux,(aux / get_base1(nu,n,"nu",1)), base_rng__)); - } - current_statement_begin__ = 729; - if (as_bool(logical_lt(gamma_temp,poisson_max))) { - current_statement_begin__ = 730; - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(gamma_temp, base_rng__))); - } else { - current_statement_begin__ = 731; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(gamma_temp,sqrt(gamma_temp), base_rng__))); - } - } - } - } - current_statement_begin__ = 733; - stan::math::assign(mean_PPD, (mean_PPD / N)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - vars__.push_back(mean_PPD); - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_count"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_gt(family,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= N; ++k_1__) { - for (int k_0__ = 1; k_0__ <= logical_eq(family,3); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "noise" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(prior_dist,7) ? sum(num_normals) : K ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_z_T; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_T" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_rho; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_concentration; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= t; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "tau" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_gt(family,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= N; ++k_1__) { - for (int k_0__ = 1; k_0__ <= logical_eq(family,3); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "noise" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - - if (!include_gqs__ && !include_tparams__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K_smooth; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta_smooth" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_gt(K_smooth,0) ? get_base1(smooth_map,K_smooth,"smooth_map",1) : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "smooth_sd" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= q; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "b" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= len_theta_L; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_L" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_lm_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_lm"); - reader.add_event(133, 133, "end", "model_lm"); - return reader; -} - -template -typename boost::math::tools::promote_args::type>::type -ll_mvn_ols_qr_lp(const Eigen::Matrix& theta, - const Eigen::Matrix& b, - const T2__& intercept, - const T3__& ybar, - const T4__& SSR, - const T5__& sigma, - const int& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 38; - lp_accum__.add((((-(0.5) * ((dot_self(subtract(theta,b)) + (N * square((intercept - ybar)))) + SSR)) / square(sigma)) - (N * (log(sigma) + 0.91893853320467267)))); - current_statement_begin__ = 42; - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_mvn_ols_qr_lp_functor__ { - template - typename boost::math::tools::promote_args::type>::type - operator()(const Eigen::Matrix& theta, - const Eigen::Matrix& b, - const T2__& intercept, - const T3__& ybar, - const T4__& SSR, - const T5__& sigma, - const int& N, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_mvn_ols_qr_lp(theta, b, intercept, ybar, SSR, sigma, N, lp__, lp_accum__, pstream__); - } -}; - -class model_lm : public prob_grad { -private: - int has_intercept; - int prior_dist_for_intercept; - double prior_scale_for_intercept; - double prior_mean_for_intercept; - int prior_dist; - int prior_PD; - double eta; - int J; - vector N; - int K; - vector xbarR_inv; - vector ybar; - double center_y; - vector s_Y; - vector Rb; - vector SSR; - vector R_inv; - double half_K; - vector sqrt_inv_N; - vector sqrt_Nm1; -public: - model_lm(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_lm(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_lm_namespace::model_lm"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "eta", "double", context__.to_vec()); - eta = double(0); - vals_r__ = context__.vals_r("eta"); - pos__ = 0; - eta = vals_r__[pos__++]; - context__.validate_dims("data initialization", "J", "int", context__.to_vec()); - J = int(0); - vals_i__ = context__.vals_i("J"); - pos__ = 0; - J = vals_i__[pos__++]; - validate_non_negative_index("N", "J", J); - context__.validate_dims("data initialization", "N", "int", context__.to_vec(J)); - validate_non_negative_index("N", "J", J); - N = std::vector(J,int(0)); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - size_t N_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < N_limit_0__; ++i_0__) { - N[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbarR_inv", "J", J); - validate_non_negative_index("xbarR_inv", "K", K); - context__.validate_dims("data initialization", "xbarR_inv", "vector_d", context__.to_vec(J,K)); - validate_non_negative_index("xbarR_inv", "J", J); - validate_non_negative_index("xbarR_inv", "K", K); - xbarR_inv = std::vector(J,vector_d(static_cast(K))); - vals_r__ = context__.vals_r("xbarR_inv"); - pos__ = 0; - size_t xbarR_inv_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbarR_inv_i_vec_lim__; ++i_vec__) { - size_t xbarR_inv_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < xbarR_inv_limit_0__; ++i_0__) { - xbarR_inv[i_0__][i_vec__] = vals_r__[pos__++]; - } - } - validate_non_negative_index("ybar", "J", J); - context__.validate_dims("data initialization", "ybar", "double", context__.to_vec(J)); - validate_non_negative_index("ybar", "J", J); - ybar = std::vector(J,double(0)); - vals_r__ = context__.vals_r("ybar"); - pos__ = 0; - size_t ybar_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < ybar_limit_0__; ++i_0__) { - ybar[i_0__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "center_y", "double", context__.to_vec()); - center_y = double(0); - vals_r__ = context__.vals_r("center_y"); - pos__ = 0; - center_y = vals_r__[pos__++]; - validate_non_negative_index("s_Y", "J", J); - context__.validate_dims("data initialization", "s_Y", "double", context__.to_vec(J)); - validate_non_negative_index("s_Y", "J", J); - s_Y = std::vector(J,double(0)); - vals_r__ = context__.vals_r("s_Y"); - pos__ = 0; - size_t s_Y_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < s_Y_limit_0__; ++i_0__) { - s_Y[i_0__] = vals_r__[pos__++]; - } - validate_non_negative_index("Rb", "J", J); - validate_non_negative_index("Rb", "K", K); - context__.validate_dims("data initialization", "Rb", "vector_d", context__.to_vec(J,K)); - validate_non_negative_index("Rb", "J", J); - validate_non_negative_index("Rb", "K", K); - Rb = std::vector(J,vector_d(static_cast(K))); - vals_r__ = context__.vals_r("Rb"); - pos__ = 0; - size_t Rb_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < Rb_i_vec_lim__; ++i_vec__) { - size_t Rb_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < Rb_limit_0__; ++i_0__) { - Rb[i_0__][i_vec__] = vals_r__[pos__++]; - } - } - validate_non_negative_index("SSR", "J", J); - context__.validate_dims("data initialization", "SSR", "double", context__.to_vec(J)); - validate_non_negative_index("SSR", "J", J); - SSR = std::vector(J,double(0)); - vals_r__ = context__.vals_r("SSR"); - pos__ = 0; - size_t SSR_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < SSR_limit_0__; ++i_0__) { - SSR[i_0__] = vals_r__[pos__++]; - } - validate_non_negative_index("R_inv", "J", J); - validate_non_negative_index("R_inv", "K", K); - validate_non_negative_index("R_inv", "K", K); - context__.validate_dims("data initialization", "R_inv", "matrix_d", context__.to_vec(J,K,K)); - validate_non_negative_index("R_inv", "J", J); - validate_non_negative_index("R_inv", "K", K); - validate_non_negative_index("R_inv", "K", K); - R_inv = std::vector(J,matrix_d(static_cast(K),static_cast(K))); - vals_r__ = context__.vals_r("R_inv"); - pos__ = 0; - size_t R_inv_m_mat_lim__ = K; - size_t R_inv_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < R_inv_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < R_inv_m_mat_lim__; ++m_mat__) { - size_t R_inv_limit_0__ = J; - for (size_t i_0__ = 0; i_0__ < R_inv_limit_0__; ++i_0__) { - R_inv[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - - // validate, data variables - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,1); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,1); - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"eta",eta,0); - check_greater_or_equal(function__,"J",J,1); - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"N[k0__]",N[k0__],1); - } - check_greater_or_equal(function__,"K",K,1); - check_less_or_equal(function__,"K",K,min(N)); - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"s_Y[k0__]",s_Y[k0__],0); - } - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"SSR[k0__]",SSR[k0__],0); - } - // initialize data variables - half_K = double(0); - stan::math::fill(half_K,DUMMY_VAR__); - stan::math::assign(half_K,(0.5 * K)); - validate_non_negative_index("sqrt_inv_N", "J", J); - sqrt_inv_N = std::vector(J,double(0)); - stan::math::fill(sqrt_inv_N,DUMMY_VAR__); - validate_non_negative_index("sqrt_Nm1", "J", J); - sqrt_Nm1 = std::vector(J,double(0)); - stan::math::fill(sqrt_Nm1,DUMMY_VAR__); - - try { - current_statement_begin__ = 70; - for (int j = 1; j <= J; ++j) { - - current_statement_begin__ = 71; - stan::math::assign(get_base1_lhs(sqrt_inv_N,j,"sqrt_inv_N",1), sqrt((1.0 / get_base1(N,j,"N",1)))); - current_statement_begin__ = 72; - stan::math::assign(get_base1_lhs(sqrt_Nm1,j,"sqrt_Nm1",1), sqrt((get_base1(N,j,"N",1) - 1.0))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("u", "K", K); - validate_non_negative_index("u", "J", J); - num_params_r__ += (K) * J; - validate_non_negative_index("z_alpha", "(J * has_intercept)", (J * has_intercept)); - num_params_r__ += (J * has_intercept); - validate_non_negative_index("R2", "J", J); - num_params_r__ += J; - validate_non_negative_index("log_omega", "(J * (1 - prior_PD))", (J * (1 - prior_PD))); - num_params_r__ += (J * (1 - prior_PD)); - } - - ~model_lm() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("u"))) - throw std::runtime_error("variable u missing"); - vals_r__ = context__.vals_r("u"); - pos__ = 0U; - validate_non_negative_index("u", "J", J); - validate_non_negative_index("u", "K", K); - context__.validate_dims("initialization", "u", "vector_d", context__.to_vec(J,K)); - // generate_declaration u - std::vector u(J,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < J; ++i0__) - u[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < J; ++i0__) - try { - writer__.unit_vector_unconstrain(u[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable u: ") + e.what()); - } - - if (!(context__.contains_r("z_alpha"))) - throw std::runtime_error("variable z_alpha missing"); - vals_r__ = context__.vals_r("z_alpha"); - pos__ = 0U; - validate_non_negative_index("z_alpha", "(J * has_intercept)", (J * has_intercept)); - context__.validate_dims("initialization", "z_alpha", "double", context__.to_vec((J * has_intercept))); - // generate_declaration z_alpha - std::vector z_alpha((J * has_intercept),double(0)); - for (int i0__ = 0U; i0__ < (J * has_intercept); ++i0__) - z_alpha[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (J * has_intercept); ++i0__) - try { - writer__.scalar_unconstrain(z_alpha[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_alpha: ") + e.what()); - } - - if (!(context__.contains_r("R2"))) - throw std::runtime_error("variable R2 missing"); - vals_r__ = context__.vals_r("R2"); - pos__ = 0U; - validate_non_negative_index("R2", "J", J); - context__.validate_dims("initialization", "R2", "double", context__.to_vec(J)); - // generate_declaration R2 - std::vector R2(J,double(0)); - for (int i0__ = 0U; i0__ < J; ++i0__) - R2[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < J; ++i0__) - try { - writer__.scalar_lub_unconstrain(0,1,R2[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable R2: ") + e.what()); - } - - if (!(context__.contains_r("log_omega"))) - throw std::runtime_error("variable log_omega missing"); - vals_r__ = context__.vals_r("log_omega"); - pos__ = 0U; - validate_non_negative_index("log_omega", "(J * (1 - prior_PD))", (J * (1 - prior_PD))); - context__.validate_dims("initialization", "log_omega", "vector_d", context__.to_vec((J * (1 - prior_PD)))); - // generate_declaration log_omega - vector_d log_omega(static_cast((J * (1 - prior_PD)))); - for (int j1__ = 0U; j1__ < (J * (1 - prior_PD)); ++j1__) - log_omega(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(log_omega); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable log_omega: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector > u; - size_t dim_u_0__ = J; - u.reserve(dim_u_0__); - for (size_t k_0__ = 0; k_0__ < dim_u_0__; ++k_0__) { - if (jacobian__) - u.push_back(in__.unit_vector_constrain(K,lp__)); - else - u.push_back(in__.unit_vector_constrain(K)); - } - - vector z_alpha; - size_t dim_z_alpha_0__ = (J * has_intercept); - z_alpha.reserve(dim_z_alpha_0__); - for (size_t k_0__ = 0; k_0__ < dim_z_alpha_0__; ++k_0__) { - if (jacobian__) - z_alpha.push_back(in__.scalar_constrain(lp__)); - else - z_alpha.push_back(in__.scalar_constrain()); - } - - vector R2; - size_t dim_R2_0__ = J; - R2.reserve(dim_R2_0__); - for (size_t k_0__ = 0; k_0__ < dim_R2_0__; ++k_0__) { - if (jacobian__) - R2.push_back(in__.scalar_lub_constrain(0,1,lp__)); - else - R2.push_back(in__.scalar_lub_constrain(0,1)); - } - - Eigen::Matrix log_omega; - (void) log_omega; // dummy to suppress unused var warning - if (jacobian__) - log_omega = in__.vector_constrain((J * (1 - prior_PD)),lp__); - else - log_omega = in__.vector_constrain((J * (1 - prior_PD))); - - - // transformed parameters - validate_non_negative_index("alpha", "(J * has_intercept)", (J * has_intercept)); - vector alpha((J * has_intercept)); - stan::math::initialize(alpha, DUMMY_VAR__); - stan::math::fill(alpha,DUMMY_VAR__); - validate_non_negative_index("theta", "K", K); - validate_non_negative_index("theta", "J", J); - vector > theta(J, (Eigen::Matrix (static_cast(K)))); - stan::math::initialize(theta, DUMMY_VAR__); - stan::math::fill(theta,DUMMY_VAR__); - validate_non_negative_index("sigma", "J", J); - vector sigma(J); - stan::math::initialize(sigma, DUMMY_VAR__); - stan::math::fill(sigma,DUMMY_VAR__); - - - try { - current_statement_begin__ = 85; - for (int j = 1; j <= J; ++j) { - { - T__ Delta_y; - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, DUMMY_VAR__); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,(logical_eq(prior_PD,0) ? stan::math::promote_scalar((get_base1(s_Y,j,"s_Y",1) * exp(get_base1(log_omega,j,"log_omega",1)))) : stan::math::promote_scalar(1) )); - - - current_statement_begin__ = 90; - if (as_bool(logical_gt(K,1))) { - current_statement_begin__ = 90; - stan::math::assign(get_base1_lhs(theta,j,"theta",1), multiply(multiply(multiply(get_base1(u,j,"u",1),sqrt(get_base1(R2,j,"R2",1))),get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)),Delta_y)); - } else { - current_statement_begin__ = 91; - stan::math::assign(get_base1_lhs(get_base1_lhs(theta,j,"theta",1),1,"theta",2), (((get_base1(get_base1(u,j,"u",1),1,"u",2) * sqrt(get_base1(R2,j,"R2",1))) * get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)) * Delta_y)); - } - current_statement_begin__ = 93; - stan::math::assign(get_base1_lhs(sigma,j,"sigma",1), (Delta_y * sqrt((1 - get_base1(R2,j,"R2",1))))); - current_statement_begin__ = 95; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 96; - if (as_bool(logical_eq(prior_dist_for_intercept,0))) { - current_statement_begin__ = 97; - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), get_base1(z_alpha,j,"z_alpha",1)); - } else if (as_bool(logical_eq(prior_scale_for_intercept,0))) { - current_statement_begin__ = 99; - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), (((get_base1(z_alpha,j,"z_alpha",1) * Delta_y) * get_base1(sqrt_inv_N,j,"sqrt_inv_N",1)) + prior_mean_for_intercept)); - } else { - current_statement_begin__ = 101; - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), ((get_base1(z_alpha,j,"z_alpha",1) * prior_scale_for_intercept) + prior_mean_for_intercept)); - } - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < (J * has_intercept); ++i0__) { - if (stan::math::is_uninitialized(alpha[i0__])) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: alpha" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < J; ++i0__) { - for (int i1__ = 0; i1__ < K; ++i1__) { - if (stan::math::is_uninitialized(theta[i0__](i1__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: theta" << '[' << i0__ << ']' << '[' << i1__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - } - for (int i0__ = 0; i0__ < J; ++i0__) { - if (stan::math::is_uninitialized(sigma[i0__])) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: sigma" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"sigma[k0__]",sigma[k0__],0); - } - - // model body - try { - - current_statement_begin__ = 107; - for (int j = 1; j <= J; ++j) { - - current_statement_begin__ = 108; - if (as_bool(logical_eq(prior_PD,0))) { - { - T__ dummy; - (void) dummy; // dummy to suppress unused var warning - - stan::math::initialize(dummy, DUMMY_VAR__); - stan::math::fill(dummy,DUMMY_VAR__); - T__ shift; - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, DUMMY_VAR__); - stan::math::fill(shift,DUMMY_VAR__); - - - current_statement_begin__ = 111; - stan::math::assign(shift, dot_product(get_base1(xbarR_inv,j,"xbarR_inv",1),get_base1(theta,j,"theta",1))); - current_statement_begin__ = 112; - stan::math::assign(dummy, ll_mvn_ols_qr_lp(get_base1(theta,j,"theta",1),get_base1(Rb,j,"Rb",1),(logical_eq(has_intercept,1) ? stan::math::promote_scalar((get_base1(alpha,j,"alpha",1) + shift)) : stan::math::promote_scalar(shift) ),get_base1(ybar,j,"ybar",1),get_base1(SSR,j,"SSR",1),get_base1(sigma,j,"sigma",1),get_base1(N,j,"N",1), lp__, lp_accum__, pstream__)); - } - } - } - current_statement_begin__ = 118; - if (as_bool((primitive_value(logical_eq(has_intercept,1)) && primitive_value(logical_gt(prior_dist_for_intercept,0))))) { - current_statement_begin__ = 119; - lp_accum__.add(normal_log(z_alpha,0,1)); - } - current_statement_begin__ = 120; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 120; - lp_accum__.add(beta_log(R2,half_K,eta)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("u"); - names__.push_back("z_alpha"); - names__.push_back("R2"); - names__.push_back("log_omega"); - names__.push_back("alpha"); - names__.push_back("theta"); - names__.push_back("sigma"); - names__.push_back("mean_PPD"); - names__.push_back("beta"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(J); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J * has_intercept)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J * (1 - prior_PD))); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J * has_intercept)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(J); - dims__.push_back(K); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_lm_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector u; - size_t dim_u_0__ = J; - for (size_t k_0__ = 0; k_0__ < dim_u_0__; ++k_0__) { - u.push_back(in__.unit_vector_constrain(K)); - } - vector z_alpha; - size_t dim_z_alpha_0__ = (J * has_intercept); - for (size_t k_0__ = 0; k_0__ < dim_z_alpha_0__; ++k_0__) { - z_alpha.push_back(in__.scalar_constrain()); - } - vector R2; - size_t dim_R2_0__ = J; - for (size_t k_0__ = 0; k_0__ < dim_R2_0__; ++k_0__) { - R2.push_back(in__.scalar_lub_constrain(0,1)); - } - vector_d log_omega = in__.vector_constrain((J * (1 - prior_PD))); - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(u[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < (J * has_intercept); ++k_0__) { - vars__.push_back(z_alpha[k_0__]); - } - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(R2[k_0__]); - } - for (int k_0__ = 0; k_0__ < (J * (1 - prior_PD)); ++k_0__) { - vars__.push_back(log_omega[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("alpha", "(J * has_intercept)", (J * has_intercept)); - vector alpha((J * has_intercept), 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - validate_non_negative_index("theta", "K", K); - validate_non_negative_index("theta", "J", J); - vector theta(J, (vector_d(static_cast(K)))); - stan::math::initialize(theta, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta,DUMMY_VAR__); - validate_non_negative_index("sigma", "J", J); - vector sigma(J, 0.0); - stan::math::initialize(sigma, std::numeric_limits::quiet_NaN()); - stan::math::fill(sigma,DUMMY_VAR__); - - - try { - current_statement_begin__ = 85; - for (int j = 1; j <= J; ++j) { - { - double Delta_y(0.0); - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, std::numeric_limits::quiet_NaN()); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,(logical_eq(prior_PD,0) ? stan::math::promote_scalar((get_base1(s_Y,j,"s_Y",1) * exp(get_base1(log_omega,j,"log_omega",1)))) : stan::math::promote_scalar(1) )); - - - current_statement_begin__ = 90; - if (as_bool(logical_gt(K,1))) { - current_statement_begin__ = 90; - stan::math::assign(get_base1_lhs(theta,j,"theta",1), multiply(multiply(multiply(get_base1(u,j,"u",1),sqrt(get_base1(R2,j,"R2",1))),get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)),Delta_y)); - } else { - current_statement_begin__ = 91; - stan::math::assign(get_base1_lhs(get_base1_lhs(theta,j,"theta",1),1,"theta",2), (((get_base1(get_base1(u,j,"u",1),1,"u",2) * sqrt(get_base1(R2,j,"R2",1))) * get_base1(sqrt_Nm1,j,"sqrt_Nm1",1)) * Delta_y)); - } - current_statement_begin__ = 93; - stan::math::assign(get_base1_lhs(sigma,j,"sigma",1), (Delta_y * sqrt((1 - get_base1(R2,j,"R2",1))))); - current_statement_begin__ = 95; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 96; - if (as_bool(logical_eq(prior_dist_for_intercept,0))) { - current_statement_begin__ = 97; - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), get_base1(z_alpha,j,"z_alpha",1)); - } else if (as_bool(logical_eq(prior_scale_for_intercept,0))) { - current_statement_begin__ = 99; - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), (((get_base1(z_alpha,j,"z_alpha",1) * Delta_y) * get_base1(sqrt_inv_N,j,"sqrt_inv_N",1)) + prior_mean_for_intercept)); - } else { - current_statement_begin__ = 101; - stan::math::assign(get_base1_lhs(alpha,j,"alpha",1), ((get_base1(z_alpha,j,"z_alpha",1) * prior_scale_for_intercept) + prior_mean_for_intercept)); - } - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int k0__ = 0; k0__ < J; ++k0__) { - check_greater_or_equal(function__,"sigma[k0__]",sigma[k0__],0); - } - - // write transformed parameters - for (int k_0__ = 0; k_0__ < (J * has_intercept); ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(theta[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(sigma[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("mean_PPD", "J", J); - vector mean_PPD(J, 0.0); - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - validate_non_negative_index("beta", "K", K); - validate_non_negative_index("beta", "J", J); - vector beta(J, (vector_d(static_cast(K)))); - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - - - try { - current_statement_begin__ = 126; - for (int j = 1; j <= J; ++j) { - { - double shift(0.0); - (void) shift; // dummy to suppress unused var warning - - stan::math::initialize(shift, std::numeric_limits::quiet_NaN()); - stan::math::fill(shift,DUMMY_VAR__); - - - current_statement_begin__ = 128; - stan::math::assign(shift, dot_product(get_base1(xbarR_inv,j,"xbarR_inv",1),get_base1(theta,j,"theta",1))); - current_statement_begin__ = 129; - stan::math::assign(get_base1_lhs(mean_PPD,j,"mean_PPD",1), normal_rng((logical_eq(has_intercept,1) ? stan::math::promote_scalar((get_base1(alpha,j,"alpha",1) + shift)) : stan::math::promote_scalar(shift) ),(get_base1(sigma,j,"sigma",1) * get_base1(sqrt_inv_N,j,"sqrt_inv_N",1)), base_rng__)); - current_statement_begin__ = 131; - stan::math::assign(get_base1_lhs(beta,j,"beta",1), multiply(get_base1(R_inv,j,"R_inv",1),get_base1(theta,j,"theta",1))); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(mean_PPD[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(beta[k_0__][k_1__]); - } - } - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_lm"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "R2" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J * (1 - prior_PD)); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "log_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "sigma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "R2" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J * (1 - prior_PD)); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "log_omega" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= (J * has_intercept); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "sigma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_polr_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_polr"); - reader.add_event(313, 313, "end", "model_polr"); - return reader; -} - -template -typename boost::math::tools::promote_args::type -CDF_polr(const T0__& x, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 34; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 34; - return stan::math::promote_scalar(inv_logit(x)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 35; - return stan::math::promote_scalar(Phi(x)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 36; - return stan::math::promote_scalar(gumbel_cdf(x,0,1)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 37; - return stan::math::promote_scalar(inv_cloglog(x)); - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 38; - return stan::math::promote_scalar(cauchy_cdf(x,0,1)); - } else { - current_statement_begin__ = 39; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 39; - current_statement_begin__ = 40; - return stan::math::promote_scalar(x); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CDF_polr_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& x, - const int& link, std::ostream* pstream__) const { - return CDF_polr(x, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_polr(const std::vector& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& cutpoints, - const int& link, - const T4__& alpha, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - int J(0); - (void) J; // dummy to suppress unused var warning - - stan::math::fill(J, std::numeric_limits::min()); - stan::math::assign(J,(rows(cutpoints) + 1)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 57; - if (as_bool((primitive_value(logical_lt(link,1)) || primitive_value(logical_gt(link,5))))) { - current_statement_begin__ = 58; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 58; - current_statement_begin__ = 60; - if (as_bool(logical_eq(alpha,1))) { - current_statement_begin__ = 60; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 61; - if (as_bool(logical_eq(get_base1(y,n,"y",1),1))) { - current_statement_begin__ = 61; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), CDF_polr((get_base1(cutpoints,1,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__)); - } else if (as_bool(logical_eq(get_base1(y,n,"y",1),J))) { - current_statement_begin__ = 62; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), (1 - CDF_polr((get_base1(cutpoints,(J - 1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__))); - } else { - current_statement_begin__ = 63; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), (CDF_polr((get_base1(cutpoints,get_base1(y,n,"y",1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__) - CDF_polr((get_base1(cutpoints,(get_base1(y,n,"y",1) - 1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__))); - } - } - } else { - current_statement_begin__ = 66; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 67; - if (as_bool(logical_eq(get_base1(y,n,"y",1),1))) { - current_statement_begin__ = 67; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), pow(CDF_polr((get_base1(cutpoints,1,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__),alpha)); - } else if (as_bool(logical_eq(get_base1(y,n,"y",1),J))) { - current_statement_begin__ = 68; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), (1 - pow(CDF_polr((get_base1(cutpoints,(J - 1),"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__),alpha))); - } else { - current_statement_begin__ = 69; - std::stringstream errmsg_stream__; - errmsg_stream__ << "alpha not allowed with more than 2 outcome categories"; - throw std::domain_error(errmsg_stream__.str()); - } - } - } - current_statement_begin__ = 71; - return stan::math::promote_scalar(log(ll)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_polr_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& cutpoints, - const int& link, - const T4__& alpha, std::ostream* pstream__) const { - return pw_polr(y, eta, cutpoints, link, alpha, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_cutpoints(const Eigen::Matrix& probabilities, - const T1__& scale, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int C(0); - (void) C; // dummy to suppress unused var warning - - stan::math::fill(C, std::numeric_limits::min()); - stan::math::assign(C,(rows(probabilities) - 1)); - validate_non_negative_index("cutpoints", "C", C); - Eigen::Matrix cutpoints(static_cast(C)); - (void) cutpoints; // dummy to suppress unused var warning - - stan::math::initialize(cutpoints, std::numeric_limits::quiet_NaN()); - stan::math::fill(cutpoints,DUMMY_VAR__); - fun_scalar_t__ running_sum; - (void) running_sum; // dummy to suppress unused var warning - - stan::math::initialize(running_sum, std::numeric_limits::quiet_NaN()); - stan::math::fill(running_sum,DUMMY_VAR__); - stan::math::assign(running_sum,0); - - - current_statement_begin__ = 88; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 88; - for (int c = 1; c <= C; ++c) { - - current_statement_begin__ = 89; - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - current_statement_begin__ = 90; - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), logit(running_sum)); - } - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 92; - for (int c = 1; c <= C; ++c) { - - current_statement_begin__ = 93; - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - current_statement_begin__ = 94; - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), inv_Phi(running_sum)); - } - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 96; - for (int c = 1; c <= C; ++c) { - - current_statement_begin__ = 97; - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - current_statement_begin__ = 98; - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), -(log(-(log(running_sum))))); - } - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 100; - for (int c = 1; c <= C; ++c) { - - current_statement_begin__ = 101; - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - current_statement_begin__ = 102; - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), log(-(log1m(running_sum)))); - } - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 104; - for (int c = 1; c <= C; ++c) { - - current_statement_begin__ = 105; - stan::math::assign(running_sum, (running_sum + get_base1(probabilities,c,"probabilities",1))); - current_statement_begin__ = 106; - stan::math::assign(get_base1_lhs(cutpoints,c,"cutpoints",1), tan((stan::math::pi() * (running_sum - 0.5)))); - } - } else { - current_statement_begin__ = 108; - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 108; - current_statement_begin__ = 109; - return stan::math::promote_scalar(multiply(scale,cutpoints)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_cutpoints_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& probabilities, - const T1__& scale, - const int& link, std::ostream* pstream__) const { - return make_cutpoints(probabilities, scale, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -draw_ystar_rng(const T0__& lower, - const T1__& upper, - const T2__& eta, - const int& link, RNG& base_rng__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int iter(0); - (void) iter; // dummy to suppress unused var warning - - stan::math::fill(iter, std::numeric_limits::min()); - stan::math::assign(iter,0); - fun_scalar_t__ ystar; - (void) ystar; // dummy to suppress unused var warning - - stan::math::initialize(ystar, std::numeric_limits::quiet_NaN()); - stan::math::fill(ystar,DUMMY_VAR__); - stan::math::assign(ystar,stan::math::not_a_number()); - - - current_statement_begin__ = 124; - if (as_bool(logical_gte(lower,upper))) { - current_statement_begin__ = 125; - std::stringstream errmsg_stream__; - errmsg_stream__ << "lower must be less than upper"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 125; - current_statement_begin__ = 129; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 129; - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - current_statement_begin__ = 130; - stan::math::assign(ystar, logistic_rng(eta,1, base_rng__)); - } - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 131; - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - current_statement_begin__ = 132; - stan::math::assign(ystar, normal_rng(eta,1, base_rng__)); - } - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 133; - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - current_statement_begin__ = 134; - stan::math::assign(ystar, gumbel_rng(eta,1, base_rng__)); - } - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 135; - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - current_statement_begin__ = 136; - stan::math::assign(ystar, log(-(log1m(uniform_rng(0,1, base_rng__))))); - } - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 137; - while (as_bool(logical_negation((primitive_value(logical_gt(ystar,lower)) && primitive_value(logical_lt(ystar,upper)))))) { - current_statement_begin__ = 138; - stan::math::assign(ystar, cauchy_rng(eta,1, base_rng__)); - } - } else { - current_statement_begin__ = 139; - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 139; - current_statement_begin__ = 140; - return stan::math::promote_scalar(ystar); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct draw_ystar_rng_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& lower, - const T1__& upper, - const T2__& eta, - const int& link, RNG& base_rng__, std::ostream* pstream__) const { - return draw_ystar_rng(lower, upper, eta, link, base_rng__, pstream__); - } -}; - -class model_polr : public prob_grad { -private: - int N; - int K; - vector_d xbar; - int dense_X; - vector X; - int nnz_X; - vector_d w_X; - vector v_X; - vector u_X; - int K_smooth; - matrix_d S; - vector smooth_map; - int J; - vector y; - int prior_PD; - int has_intercept; - int family; - int link; - int prior_dist; - int prior_dist_for_intercept; - int prior_dist_for_aux; - int prior_dist_for_smooth; - int has_weights; - vector_d weights; - int has_offset; - vector_d offset; - double regularization; - vector_d prior_counts; - int is_skewed; - double shape; - double rate; - int do_residuals; - double half_K; - double sqrt_Nm1; - int is_constant; - vector_d beta_smooth; -public: - model_polr(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_polr(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_polr_namespace::model_polr"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "dense_X", "int", context__.to_vec()); - dense_X = int(0); - vals_i__ = context__.vals_i("dense_X"); - pos__ = 0; - dense_X = vals_i__[pos__++]; - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(dense_X,N,K)); - validate_non_negative_index("X", "dense_X", dense_X); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = std::vector(dense_X,matrix_d(static_cast(N),static_cast(K))); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - size_t X_limit_0__ = dense_X; - for (size_t i_0__ = 0; i_0__ < X_limit_0__; ++i_0__) { - X[i_0__](m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - } - context__.validate_dims("data initialization", "nnz_X", "int", context__.to_vec()); - nnz_X = int(0); - vals_i__ = context__.vals_i("nnz_X"); - pos__ = 0; - nnz_X = vals_i__[pos__++]; - validate_non_negative_index("w_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "w_X", "vector_d", context__.to_vec(nnz_X)); - validate_non_negative_index("w_X", "nnz_X", nnz_X); - w_X = vector_d(static_cast(nnz_X)); - vals_r__ = context__.vals_r("w_X"); - pos__ = 0; - size_t w_X_i_vec_lim__ = nnz_X; - for (size_t i_vec__ = 0; i_vec__ < w_X_i_vec_lim__; ++i_vec__) { - w_X[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v_X", "nnz_X", nnz_X); - context__.validate_dims("data initialization", "v_X", "int", context__.to_vec(nnz_X)); - validate_non_negative_index("v_X", "nnz_X", nnz_X); - v_X = std::vector(nnz_X,int(0)); - vals_i__ = context__.vals_i("v_X"); - pos__ = 0; - size_t v_X_limit_0__ = nnz_X; - for (size_t i_0__ = 0; i_0__ < v_X_limit_0__; ++i_0__) { - v_X[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - context__.validate_dims("data initialization", "u_X", "int", context__.to_vec((dense_X ? 0 : (N + 1) ))); - validate_non_negative_index("u_X", "(dense_X ? 0 : (N + 1) )", (dense_X ? 0 : (N + 1) )); - u_X = std::vector((dense_X ? 0 : (N + 1) ),int(0)); - vals_i__ = context__.vals_i("u_X"); - pos__ = 0; - size_t u_X_limit_0__ = (dense_X ? 0 : (N + 1) ); - for (size_t i_0__ = 0; i_0__ < u_X_limit_0__; ++i_0__) { - u_X[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "K_smooth", "int", context__.to_vec()); - K_smooth = int(0); - vals_i__ = context__.vals_i("K_smooth"); - pos__ = 0; - K_smooth = vals_i__[pos__++]; - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "S", "matrix_d", context__.to_vec(N,K_smooth)); - validate_non_negative_index("S", "N", N); - validate_non_negative_index("S", "K_smooth", K_smooth); - S = matrix_d(static_cast(N),static_cast(K_smooth)); - vals_r__ = context__.vals_r("S"); - pos__ = 0; - size_t S_m_mat_lim__ = N; - size_t S_n_mat_lim__ = K_smooth; - for (size_t n_mat__ = 0; n_mat__ < S_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < S_m_mat_lim__; ++m_mat__) { - S(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - context__.validate_dims("data initialization", "smooth_map", "int", context__.to_vec(K_smooth)); - validate_non_negative_index("smooth_map", "K_smooth", K_smooth); - smooth_map = std::vector(K_smooth,int(0)); - vals_i__ = context__.vals_i("smooth_map"); - pos__ = 0; - size_t smooth_map_limit_0__ = K_smooth; - for (size_t i_0__ = 0; i_0__ < smooth_map_limit_0__; ++i_0__) { - smooth_map[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "J", "int", context__.to_vec()); - J = int(0); - vals_i__ = context__.vals_i("J"); - pos__ = 0; - J = vals_i__[pos__++]; - validate_non_negative_index("y", "N", N); - context__.validate_dims("data initialization", "y", "int", context__.to_vec(N)); - validate_non_negative_index("y", "N", N); - y = std::vector(N,int(0)); - vals_i__ = context__.vals_i("y"); - pos__ = 0; - size_t y_limit_0__ = N; - for (size_t i_0__ = 0; i_0__ < y_limit_0__; ++i_0__) { - y[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_PD", "int", context__.to_vec()); - prior_PD = int(0); - vals_i__ = context__.vals_i("prior_PD"); - pos__ = 0; - prior_PD = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_smooth", "int", context__.to_vec()); - prior_dist_for_smooth = int(0); - vals_i__ = context__.vals_i("prior_dist_for_smooth"); - pos__ = 0; - prior_dist_for_smooth = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_weights", "int", context__.to_vec()); - has_weights = int(0); - vals_i__ = context__.vals_i("has_weights"); - pos__ = 0; - has_weights = vals_i__[pos__++]; - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - context__.validate_dims("data initialization", "weights", "vector_d", context__.to_vec((has_weights ? N : 0 ))); - validate_non_negative_index("weights", "(has_weights ? N : 0 )", (has_weights ? N : 0 )); - weights = vector_d(static_cast((has_weights ? N : 0 ))); - vals_r__ = context__.vals_r("weights"); - pos__ = 0; - size_t weights_i_vec_lim__ = (has_weights ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < weights_i_vec_lim__; ++i_vec__) { - weights[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "has_offset", "int", context__.to_vec()); - has_offset = int(0); - vals_i__ = context__.vals_i("has_offset"); - pos__ = 0; - has_offset = vals_i__[pos__++]; - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - context__.validate_dims("data initialization", "offset", "vector_d", context__.to_vec((has_offset ? N : 0 ))); - validate_non_negative_index("offset", "(has_offset ? N : 0 )", (has_offset ? N : 0 )); - offset = vector_d(static_cast((has_offset ? N : 0 ))); - vals_r__ = context__.vals_r("offset"); - pos__ = 0; - size_t offset_i_vec_lim__ = (has_offset ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < offset_i_vec_lim__; ++i_vec__) { - offset[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "regularization", "double", context__.to_vec()); - regularization = double(0); - vals_r__ = context__.vals_r("regularization"); - pos__ = 0; - regularization = vals_r__[pos__++]; - validate_non_negative_index("prior_counts", "J", J); - context__.validate_dims("data initialization", "prior_counts", "vector_d", context__.to_vec(J)); - validate_non_negative_index("prior_counts", "J", J); - prior_counts = vector_d(static_cast(J)); - vals_r__ = context__.vals_r("prior_counts"); - pos__ = 0; - size_t prior_counts_i_vec_lim__ = J; - for (size_t i_vec__ = 0; i_vec__ < prior_counts_i_vec_lim__; ++i_vec__) { - prior_counts[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "is_skewed", "int", context__.to_vec()); - is_skewed = int(0); - vals_i__ = context__.vals_i("is_skewed"); - pos__ = 0; - is_skewed = vals_i__[pos__++]; - context__.validate_dims("data initialization", "shape", "double", context__.to_vec()); - shape = double(0); - vals_r__ = context__.vals_r("shape"); - pos__ = 0; - shape = vals_r__[pos__++]; - context__.validate_dims("data initialization", "rate", "double", context__.to_vec()); - rate = double(0); - vals_r__ = context__.vals_r("rate"); - pos__ = 0; - rate = vals_r__[pos__++]; - context__.validate_dims("data initialization", "do_residuals", "int", context__.to_vec()); - do_residuals = int(0); - vals_i__ = context__.vals_i("do_residuals"); - pos__ = 0; - do_residuals = vals_i__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"dense_X",dense_X,0); - check_less_or_equal(function__,"dense_X",dense_X,1); - check_greater_or_equal(function__,"nnz_X",nnz_X,0); - for (int k0__ = 0; k0__ < nnz_X; ++k0__) { - check_greater_or_equal(function__,"v_X[k0__]",v_X[k0__],0); - } - for (int k0__ = 0; k0__ < (dense_X ? 0 : (N + 1) ); ++k0__) { - check_greater_or_equal(function__,"u_X[k0__]",u_X[k0__],0); - } - check_greater_or_equal(function__,"K_smooth",K_smooth,0); - for (int k0__ = 0; k0__ < K_smooth; ++k0__) { - check_greater_or_equal(function__,"smooth_map[k0__]",smooth_map[k0__],1); - } - check_greater_or_equal(function__,"J",J,2); - for (int k0__ = 0; k0__ < N; ++k0__) { - check_greater_or_equal(function__,"y[k0__]",y[k0__],1); - check_less_or_equal(function__,"y[k0__]",y[k0__],J); - } - check_greater_or_equal(function__,"prior_PD",prior_PD,0); - check_less_or_equal(function__,"prior_PD",prior_PD,1); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - check_greater_or_equal(function__,"family",family,1); - check_greater_or_equal(function__,"link",link,1); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_less_or_equal(function__,"prior_dist",prior_dist,7); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_less_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,2); - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,0); - check_less_or_equal(function__,"prior_dist_for_smooth",prior_dist_for_smooth,3); - check_greater_or_equal(function__,"has_weights",has_weights,0); - check_less_or_equal(function__,"has_weights",has_weights,1); - check_greater_or_equal(function__,"has_offset",has_offset,0); - check_less_or_equal(function__,"has_offset",has_offset,1); - check_greater_or_equal(function__,"regularization",regularization,0); - check_greater_or_equal(function__,"prior_counts",prior_counts,0); - check_greater_or_equal(function__,"is_skewed",is_skewed,0); - check_less_or_equal(function__,"is_skewed",is_skewed,1); - check_greater_or_equal(function__,"shape",shape,0); - check_greater_or_equal(function__,"rate",rate,0); - check_greater_or_equal(function__,"do_residuals",do_residuals,0); - check_less_or_equal(function__,"do_residuals",do_residuals,1); - // initialize data variables - half_K = double(0); - stan::math::fill(half_K,DUMMY_VAR__); - stan::math::assign(half_K,(0.5 * K)); - sqrt_Nm1 = double(0); - stan::math::fill(sqrt_Nm1,DUMMY_VAR__); - stan::math::assign(sqrt_Nm1,sqrt((N - 1.0))); - is_constant = int(0); - stan::math::fill(is_constant, std::numeric_limits::min()); - stan::math::assign(is_constant,1); - validate_non_negative_index("beta_smooth", "0", 0); - beta_smooth = vector_d(static_cast(0)); - stan::math::fill(beta_smooth,DUMMY_VAR__); - - try { - current_statement_begin__ = 211; - for (int j = 1; j <= J; ++j) { - current_statement_begin__ = 211; - if (as_bool(logical_neq(get_base1(prior_counts,j,"prior_counts",1),1))) { - current_statement_begin__ = 211; - stan::math::assign(is_constant, 0); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - check_greater_or_equal(function__,"half_K",half_K,0); - check_greater_or_equal(function__,"sqrt_Nm1",sqrt_Nm1,0); - check_greater_or_equal(function__,"is_constant",is_constant,0); - check_less_or_equal(function__,"is_constant",is_constant,1); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("pi", "J", J); - num_params_r__ += (J - 1); - validate_non_negative_index("u", "K", K); - num_params_r__ += (K); - ++num_params_r__; - validate_non_negative_index("alpha", "is_skewed", is_skewed); - num_params_r__ += is_skewed; - } - - ~model_polr() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("pi"))) - throw std::runtime_error("variable pi missing"); - vals_r__ = context__.vals_r("pi"); - pos__ = 0U; - validate_non_negative_index("pi", "J", J); - context__.validate_dims("initialization", "pi", "vector_d", context__.to_vec(J)); - // generate_declaration pi - vector_d pi(static_cast(J)); - for (int j1__ = 0U; j1__ < J; ++j1__) - pi(j1__) = vals_r__[pos__++]; - try { - writer__.simplex_unconstrain(pi); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable pi: ") + e.what()); - } - - if (!(context__.contains_r("u"))) - throw std::runtime_error("variable u missing"); - vals_r__ = context__.vals_r("u"); - pos__ = 0U; - validate_non_negative_index("u", "K", K); - context__.validate_dims("initialization", "u", "vector_d", context__.to_vec(K)); - // generate_declaration u - vector_d u(static_cast(K)); - for (int j1__ = 0U; j1__ < K; ++j1__) - u(j1__) = vals_r__[pos__++]; - try { - writer__.unit_vector_unconstrain(u); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable u: ") + e.what()); - } - - if (!(context__.contains_r("R2"))) - throw std::runtime_error("variable R2 missing"); - vals_r__ = context__.vals_r("R2"); - pos__ = 0U; - context__.validate_dims("initialization", "R2", "double", context__.to_vec()); - // generate_declaration R2 - double R2(0); - R2 = vals_r__[pos__++]; - try { - writer__.scalar_lub_unconstrain(0,1,R2); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable R2: ") + e.what()); - } - - if (!(context__.contains_r("alpha"))) - throw std::runtime_error("variable alpha missing"); - vals_r__ = context__.vals_r("alpha"); - pos__ = 0U; - validate_non_negative_index("alpha", "is_skewed", is_skewed); - context__.validate_dims("initialization", "alpha", "double", context__.to_vec(is_skewed)); - // generate_declaration alpha - std::vector alpha(is_skewed,double(0)); - for (int i0__ = 0U; i0__ < is_skewed; ++i0__) - alpha[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < is_skewed; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,alpha[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable alpha: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - Eigen::Matrix pi; - (void) pi; // dummy to suppress unused var warning - if (jacobian__) - pi = in__.simplex_constrain(J,lp__); - else - pi = in__.simplex_constrain(J); - - Eigen::Matrix u; - (void) u; // dummy to suppress unused var warning - if (jacobian__) - u = in__.unit_vector_constrain(K,lp__); - else - u = in__.unit_vector_constrain(K); - - T__ R2; - (void) R2; // dummy to suppress unused var warning - if (jacobian__) - R2 = in__.scalar_lub_constrain(0,1,lp__); - else - R2 = in__.scalar_lub_constrain(0,1); - - vector alpha; - size_t dim_alpha_0__ = is_skewed; - alpha.reserve(dim_alpha_0__); - for (size_t k_0__ = 0; k_0__ < dim_alpha_0__; ++k_0__) { - if (jacobian__) - alpha.push_back(in__.scalar_lb_constrain(0,lp__)); - else - alpha.push_back(in__.scalar_lb_constrain(0)); - } - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("cutpoints", "(J - 1)", (J - 1)); - Eigen::Matrix cutpoints(static_cast((J - 1))); - (void) cutpoints; // dummy to suppress unused var warning - - stan::math::initialize(cutpoints, DUMMY_VAR__); - stan::math::fill(cutpoints,DUMMY_VAR__); - - - try { - { - T__ Delta_y; - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, DUMMY_VAR__); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,inv(sqrt((1 - R2)))); - - - current_statement_begin__ = 224; - if (as_bool(logical_gt(K,1))) { - current_statement_begin__ = 225; - stan::math::assign(beta, multiply(multiply(multiply(u,sqrt(R2)),Delta_y),sqrt_Nm1)); - } else { - current_statement_begin__ = 226; - stan::math::assign(get_base1_lhs(beta,1,"beta",1), (((get_base1(u,1,"u",1) * sqrt(R2)) * Delta_y) * sqrt_Nm1)); - } - current_statement_begin__ = 227; - stan::math::assign(cutpoints, make_cutpoints(pi,Delta_y,link, pstream__)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < (J - 1); ++i0__) { - if (stan::math::is_uninitialized(cutpoints(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: cutpoints" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 233; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 234; - if (as_bool(dense_X)) { - current_statement_begin__ = 234; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 235; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 237; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 238; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 238; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 239; - if (as_bool(K_smooth)) { - current_statement_begin__ = 239; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 240; - if (as_bool((primitive_value(logical_eq(has_weights,0)) && primitive_value(logical_eq(prior_PD,0))))) { - - current_statement_begin__ = 241; - if (as_bool(logical_eq(is_skewed,0))) { - current_statement_begin__ = 242; - lp_accum__.add(pw_polr(y,eta,cutpoints,link,1.0, pstream__)); - } else { - current_statement_begin__ = 243; - lp_accum__.add(pw_polr(y,eta,cutpoints,link,get_base1(alpha,1,"alpha",1), pstream__)); - } - } else if (as_bool(logical_eq(prior_PD,0))) { - - current_statement_begin__ = 246; - if (as_bool(logical_eq(is_skewed,0))) { - current_statement_begin__ = 247; - lp_accum__.add(dot_product(weights,pw_polr(y,eta,cutpoints,link,1.0, pstream__))); - } else { - current_statement_begin__ = 248; - lp_accum__.add(dot_product(weights,pw_polr(y,eta,cutpoints,link,get_base1(alpha,1,"alpha",1), pstream__))); - } - } - current_statement_begin__ = 251; - if (as_bool(logical_eq(is_constant,0))) { - current_statement_begin__ = 251; - lp_accum__.add(dirichlet_log(pi,prior_counts)); - } - current_statement_begin__ = 253; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 253; - lp_accum__.add(beta_log(R2,half_K,regularization)); - } - current_statement_begin__ = 254; - if (as_bool(logical_eq(is_skewed,1))) { - current_statement_begin__ = 254; - lp_accum__.add(gamma_log(alpha,shape,rate)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("pi"); - names__.push_back("u"); - names__.push_back("R2"); - names__.push_back("alpha"); - names__.push_back("beta"); - names__.push_back("cutpoints"); - names__.push_back("mean_PPD"); - names__.push_back("residuals"); - names__.push_back("zeta"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(J); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(is_skewed); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J - 1)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_gt(J,2) ? J : 1 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((do_residuals ? N : 0 )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((J - 1)); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_polr_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector_d pi = in__.simplex_constrain(J); - vector_d u = in__.unit_vector_constrain(K); - double R2 = in__.scalar_lub_constrain(0,1); - vector alpha; - size_t dim_alpha_0__ = is_skewed; - for (size_t k_0__ = 0; k_0__ < dim_alpha_0__; ++k_0__) { - alpha.push_back(in__.scalar_lb_constrain(0)); - } - for (int k_0__ = 0; k_0__ < J; ++k_0__) { - vars__.push_back(pi[k_0__]); - } - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(u[k_0__]); - } - vars__.push_back(R2); - for (int k_0__ = 0; k_0__ < is_skewed; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - validate_non_negative_index("cutpoints", "(J - 1)", (J - 1)); - vector_d cutpoints(static_cast((J - 1))); - (void) cutpoints; // dummy to suppress unused var warning - - stan::math::initialize(cutpoints, std::numeric_limits::quiet_NaN()); - stan::math::fill(cutpoints,DUMMY_VAR__); - - - try { - { - double Delta_y(0.0); - (void) Delta_y; // dummy to suppress unused var warning - - stan::math::initialize(Delta_y, std::numeric_limits::quiet_NaN()); - stan::math::fill(Delta_y,DUMMY_VAR__); - stan::math::assign(Delta_y,inv(sqrt((1 - R2)))); - - - current_statement_begin__ = 224; - if (as_bool(logical_gt(K,1))) { - current_statement_begin__ = 225; - stan::math::assign(beta, multiply(multiply(multiply(u,sqrt(R2)),Delta_y),sqrt_Nm1)); - } else { - current_statement_begin__ = 226; - stan::math::assign(get_base1_lhs(beta,1,"beta",1), (((get_base1(u,1,"u",1) * sqrt(R2)) * Delta_y) * sqrt_Nm1)); - } - current_statement_begin__ = 227; - stan::math::assign(cutpoints, make_cutpoints(pi,Delta_y,link, pstream__)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < (J - 1); ++k_0__) { - vars__.push_back(cutpoints[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - validate_non_negative_index("mean_PPD", "(logical_gt(J,2) ? J : 1 )", (logical_gt(J,2) ? J : 1 )); - vector_d mean_PPD(static_cast((logical_gt(J,2) ? J : 1 ))); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,rep_vector(0,(logical_gt(J,2) ? J : 1 ))); - validate_non_negative_index("residuals", "(do_residuals ? N : 0 )", (do_residuals ? N : 0 )); - vector_d residuals(static_cast((do_residuals ? N : 0 ))); - (void) residuals; // dummy to suppress unused var warning - - stan::math::initialize(residuals, std::numeric_limits::quiet_NaN()); - stan::math::fill(residuals,DUMMY_VAR__); - validate_non_negative_index("zeta", "(J - 1)", (J - 1)); - vector_d zeta(static_cast((J - 1))); - (void) zeta; // dummy to suppress unused var warning - - stan::math::initialize(zeta, std::numeric_limits::quiet_NaN()); - stan::math::fill(zeta,DUMMY_VAR__); - - - try { - current_statement_begin__ = 262; - if (as_bool(dense_X)) { - current_statement_begin__ = 262; - stan::math::assign(zeta, add(cutpoints,dot_product(xbar,beta))); - } else { - current_statement_begin__ = 263; - stan::math::assign(zeta, cutpoints); - } - current_statement_begin__ = 264; - if (as_bool(logical_eq(J,2))) { - current_statement_begin__ = 264; - stan::math::assign(zeta, minus(zeta)); - } - { - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 268; - if (as_bool(logical_gt(K,0))) { - - current_statement_begin__ = 269; - if (as_bool(dense_X)) { - current_statement_begin__ = 269; - stan::math::assign(eta, multiply(get_base1(X,1,"X",1),beta)); - } else { - current_statement_begin__ = 270; - stan::math::assign(eta, csr_matrix_times_vector(N,K,w_X,v_X,u_X,beta)); - } - } else { - current_statement_begin__ = 272; - stan::math::assign(eta, rep_vector(0.0,N)); - } - current_statement_begin__ = 273; - if (as_bool(logical_eq(has_offset,1))) { - current_statement_begin__ = 273; - stan::math::assign(eta, add(eta,offset)); - } - current_statement_begin__ = 274; - if (as_bool(K_smooth)) { - current_statement_begin__ = 274; - stan::math::assign(eta, add(eta,multiply(S,beta_smooth))); - } - current_statement_begin__ = 275; - for (int n = 1; n <= N; ++n) { - { - int y_tilde(0); - (void) y_tilde; // dummy to suppress unused var warning - - stan::math::fill(y_tilde, std::numeric_limits::min()); - validate_non_negative_index("theta", "J", J); - vector_d theta(static_cast(J)); - (void) theta; // dummy to suppress unused var warning - - stan::math::initialize(theta, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta,DUMMY_VAR__); - double previous(0.0); - (void) previous; // dummy to suppress unused var warning - - stan::math::initialize(previous, std::numeric_limits::quiet_NaN()); - stan::math::fill(previous,DUMMY_VAR__); - - - current_statement_begin__ = 279; - stan::math::assign(get_base1_lhs(theta,1,"theta",1), CDF_polr((get_base1(cutpoints,1,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__)); - current_statement_begin__ = 280; - stan::math::assign(previous, get_base1(theta,1,"theta",1)); - current_statement_begin__ = 281; - if (as_bool(is_skewed)) { - current_statement_begin__ = 281; - stan::math::assign(get_base1_lhs(theta,1,"theta",1), pow(get_base1(theta,1,"theta",1),get_base1(alpha,1,"alpha",1))); - } - current_statement_begin__ = 282; - for (int j = 2; j <= (J - 1); ++j) { - { - double current(0.0); - (void) current; // dummy to suppress unused var warning - - stan::math::initialize(current, std::numeric_limits::quiet_NaN()); - stan::math::fill(current,DUMMY_VAR__); - - - current_statement_begin__ = 284; - stan::math::assign(current, CDF_polr((get_base1(cutpoints,j,"cutpoints",1) - get_base1(eta,n,"eta",1)),link, pstream__)); - current_statement_begin__ = 285; - stan::math::assign(get_base1_lhs(theta,j,"theta",1), (current - previous)); - current_statement_begin__ = 286; - stan::math::assign(previous, current); - } - } - current_statement_begin__ = 288; - if (as_bool(logical_eq(is_skewed,0))) { - current_statement_begin__ = 288; - stan::math::assign(get_base1_lhs(theta,J,"theta",1), (1 - previous)); - } else { - current_statement_begin__ = 289; - stan::math::assign(get_base1_lhs(theta,J,"theta",1), (1 - pow(previous,get_base1(alpha,1,"alpha",1)))); - } - current_statement_begin__ = 290; - if (as_bool((primitive_value(logical_lte(previous,0)) || primitive_value(logical_gte(previous,1))))) { - - } else if (as_bool(logical_eq(J,2))) { - - current_statement_begin__ = 294; - stan::math::assign(get_base1_lhs(mean_PPD,1,"mean_PPD",1), (get_base1(mean_PPD,1,"mean_PPD",1) + bernoulli_rng(get_base1(theta,J,"theta",1), base_rng__))); - } else { - - current_statement_begin__ = 297; - stan::math::assign(y_tilde, categorical_rng(theta, base_rng__)); - current_statement_begin__ = 298; - stan::math::assign(get_base1_lhs(mean_PPD,y_tilde,"mean_PPD",1), (get_base1(mean_PPD,y_tilde,"mean_PPD",1) + 1)); - } - current_statement_begin__ = 301; - if (as_bool(do_residuals)) { - { - double ystar(0.0); - (void) ystar; // dummy to suppress unused var warning - - stan::math::initialize(ystar, std::numeric_limits::quiet_NaN()); - stan::math::fill(ystar,DUMMY_VAR__); - - - current_statement_begin__ = 303; - if (as_bool(logical_eq(get_base1(y,n,"y",1),1))) { - current_statement_begin__ = 304; - stan::math::assign(ystar, draw_ystar_rng(stan::math::negative_infinity(),get_base1(cutpoints,1,"cutpoints",1),get_base1(eta,n,"eta",1),link, base_rng__, pstream__)); - } else if (as_bool(logical_eq(get_base1(y,n,"y",1),J))) { - current_statement_begin__ = 306; - stan::math::assign(ystar, draw_ystar_rng(get_base1(cutpoints,(J - 1),"cutpoints",1),stan::math::positive_infinity(),get_base1(eta,n,"eta",1),link, base_rng__, pstream__)); - } else { - current_statement_begin__ = 307; - stan::math::assign(ystar, draw_ystar_rng(get_base1(cutpoints,(get_base1(y,n,"y",1) - 1),"cutpoints",1),get_base1(cutpoints,get_base1(y,n,"y",1),"cutpoints",1),get_base1(eta,n,"eta",1),link, base_rng__, pstream__)); - } - current_statement_begin__ = 308; - stan::math::assign(get_base1_lhs(residuals,n,"residuals",1), (ystar - get_base1(eta,n,"eta",1))); - } - } - } - } - current_statement_begin__ = 311; - stan::math::assign(mean_PPD, divide(mean_PPD,N)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - for (int k_0__ = 0; k_0__ < (logical_gt(J,2) ? J : 1 ); ++k_0__) { - vars__.push_back(mean_PPD[k_0__]); - } - for (int k_0__ = 0; k_0__ < (do_residuals ? N : 0 ); ++k_0__) { - vars__.push_back(residuals[k_0__]); - } - for (int k_0__ = 0; k_0__ < (J - 1); ++k_0__) { - vars__.push_back(zeta[k_0__]); - } - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_polr"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= J; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "pi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "R2"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= is_skewed; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "cutpoints" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= (logical_gt(J,2) ? J : 1 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (do_residuals ? N : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "residuals" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "pi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "u" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "R2"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= is_skewed; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "cutpoints" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - for (int k_0__ = 1; k_0__ <= (logical_gt(J,2) ? J : 1 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (do_residuals ? N : 0 ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "residuals" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (J - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "zeta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - -}; // model - -} - - - - -// Code generated by Stan version 2.16.0 - -#include - -namespace model_spatial_namespace { - -using std::istream; -using std::string; -using std::stringstream; -using std::vector; -using stan::io::dump; -using stan::math::lgamma; -using stan::model::prob_grad; -using namespace stan::math; - -typedef Eigen::Matrix vector_d; -typedef Eigen::Matrix row_vector_d; -typedef Eigen::Matrix matrix_d; - -static int current_statement_begin__; - -stan::io::program_reader prog_reader__() { - stan::io::program_reader reader; - reader.add_event(0, 0, "start", "model_spatial"); - reader.add_event(968, 968, "end", "model_spatial"); - return reader; -} - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gauss(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 31; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 31; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 32; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 33; - return stan::math::promote_scalar(inv(eta)); - } else { - current_statement_begin__ = 34; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 34; - current_statement_begin__ = 35; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gauss(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gauss(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 46; - return stan::math::promote_scalar(subtract((-(0.5) * log((6.2831853071795862 * sigma))),multiply(0.5,square(divide(subtract(y,linkinv_gauss(eta,link, pstream__)),sigma))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gauss_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& sigma, - const int& link, std::ostream* pstream__) const { - return pw_gauss(y, eta, sigma, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_gamma(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 58; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 58; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 59; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 60; - return stan::math::promote_scalar(inv(eta)); - } else { - current_statement_begin__ = 61; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 61; - current_statement_begin__ = 62; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_gamma(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -GammaReg(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ ret; - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - stan::math::assign(ret,((rows(y) * ((shape * log(shape)) - stan::math::lgamma(shape))) + ((shape - 1) * sum_log_y))); - - - current_statement_begin__ = 79; - if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 80; - stan::math::assign(ret, ((ret - (shape * sum(eta))) - (shape * sum(elt_divide(y,exp(eta)))))); - } else if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 82; - stan::math::assign(ret, ((ret - (shape * sum(log(eta)))) - (shape * sum(elt_divide(y,eta))))); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 84; - stan::math::assign(ret, ((ret + (shape * sum(log(eta)))) - (shape * dot_product(eta,y)))); - } else { - current_statement_begin__ = 85; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 85; - current_statement_begin__ = 86; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct GammaReg_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, - const T4__& sum_log_y, std::ostream* pstream__) const { - return GammaReg(y, eta, shape, link, sum_log_y, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_gamma(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 100; - if (as_bool(logical_eq(link,3))) { - - current_statement_begin__ = 101; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 102; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape * get_base1(eta,n,"eta",1)))); - } - } else if (as_bool(logical_eq(link,2))) { - - current_statement_begin__ = 106; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 107; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / exp(get_base1(eta,n,"eta",1))))); - } - } else if (as_bool(logical_eq(link,1))) { - - current_statement_begin__ = 111; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 112; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), gamma_log(get_base1(y,n,"y",1),shape,(shape / get_base1(eta,n,"eta",1)))); - } - } else { - current_statement_begin__ = 115; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 115; - current_statement_begin__ = 116; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_gamma_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& shape, - const int& link, std::ostream* pstream__) const { - return pw_gamma(y, eta, shape, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_inv_gaussian(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 127; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 127; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 128; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 129; - return stan::math::promote_scalar(inv(eta)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 130; - return stan::math::promote_scalar(inv_sqrt(eta)); - } else { - current_statement_begin__ = 131; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 131; - current_statement_begin__ = 132; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_inv_gaussian_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_inv_gaussian(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type>::type -inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 147; - return stan::math::promote_scalar(((((0.5 * rows(y)) * log((lambda / 6.2831853071795862))) - (1.5 * sum_log_y)) - ((0.5 * lambda) * dot_self(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))))); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_functor__ { - template - typename boost::math::tools::promote_args::type>::type - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& mu, - const T2__& lambda, - const T3__& sum_log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return inv_gaussian(y, mu, lambda, sum_log_y, sqrt_y, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -pw_inv_gaussian(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_inv_gaussian(eta,link, pstream__)); - - - current_statement_begin__ = 166; - return stan::math::promote_scalar(subtract(add(multiply((-(0.5) * lambda),square(elt_divide(subtract(y,mu),elt_multiply(mu,sqrt_y)))),(0.5 * log((lambda / 6.2831853071795862)))),multiply(1.5,log_y))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_inv_gaussian_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& lambda, - const int& link, - const Eigen::Matrix& log_y, - const Eigen::Matrix& sqrt_y, std::ostream* pstream__) const { - return pw_inv_gaussian(y, eta, lambda, link, log_y, sqrt_y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -inv_gaussian_rng(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ mu2; - (void) mu2; // dummy to suppress unused var warning - - stan::math::initialize(mu2, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu2,DUMMY_VAR__); - stan::math::assign(mu2,square(mu)); - fun_scalar_t__ z; - (void) z; // dummy to suppress unused var warning - - stan::math::initialize(z, std::numeric_limits::quiet_NaN()); - stan::math::fill(z,DUMMY_VAR__); - stan::math::assign(z,uniform_rng(0,1, base_rng__)); - fun_scalar_t__ y; - (void) y; // dummy to suppress unused var warning - - stan::math::initialize(y, std::numeric_limits::quiet_NaN()); - stan::math::fill(y,DUMMY_VAR__); - stan::math::assign(y,square(normal_rng(0,1, base_rng__))); - fun_scalar_t__ x; - (void) x; // dummy to suppress unused var warning - - stan::math::initialize(x, std::numeric_limits::quiet_NaN()); - stan::math::fill(x,DUMMY_VAR__); - stan::math::assign(x,(mu + (((mu2 * y) - (mu * sqrt(((((4 * mu) * lambda) * y) + (mu2 * square(y)))))) / (2 * lambda)))); - - - current_statement_begin__ = 185; - if (as_bool(logical_lte(z,(mu / (mu + x))))) { - current_statement_begin__ = 185; - return stan::math::promote_scalar(x); - } else { - current_statement_begin__ = 186; - return stan::math::promote_scalar((mu2 / x)); - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct inv_gaussian_rng_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& mu, - const T1__& lambda, RNG& base_rng__, std::ostream* pstream__) const { - return inv_gaussian_rng(mu, lambda, base_rng__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 197; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 197; - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 198; - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 199; - return stan::math::promote_scalar(inv_cloglog(eta)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 200; - return stan::math::promote_scalar(add(0.5,divide(atan(eta),stan::math::pi()))); - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 201; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,6))) { - current_statement_begin__ = 202; - return stan::math::promote_scalar(subtract(1,inv_cloglog(minus(eta)))); - } else { - current_statement_begin__ = 203; - std::stringstream errmsg_stream__; - errmsg_stream__ << "invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 203; - current_statement_begin__ = 204; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_beta_z(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 215; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 215; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 216; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 217; - return stan::math::promote_scalar(square(eta)); - } else { - current_statement_begin__ = 218; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 219; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_beta_z(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - - - current_statement_begin__ = 234; - for (int n = 1; n <= rows(y); ++n) { - - current_statement_begin__ = 235; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * dispersion),((1 - get_base1(mu,n,"mu",1)) * dispersion))); - } - current_statement_begin__ = 237; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const T2__& dispersion, - const int& link, std::ostream* pstream__) const { - return pw_beta(y, eta, dispersion, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_beta_z(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("ll", "rows(y)", rows(y)); - Eigen::Matrix ll(static_cast(rows(y))); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - validate_non_negative_index("mu", "rows(y)", rows(y)); - Eigen::Matrix mu(static_cast(rows(y))); - (void) mu; // dummy to suppress unused var warning - - stan::math::initialize(mu, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu,DUMMY_VAR__); - stan::math::assign(mu,linkinv_beta(eta,link, pstream__)); - validate_non_negative_index("mu_z", "rows(y)", rows(y)); - Eigen::Matrix mu_z(static_cast(rows(y))); - (void) mu_z; // dummy to suppress unused var warning - - stan::math::initialize(mu_z, std::numeric_limits::quiet_NaN()); - stan::math::fill(mu_z,DUMMY_VAR__); - stan::math::assign(mu_z,linkinv_beta_z(eta_z,link_phi, pstream__)); - - - current_statement_begin__ = 254; - for (int n = 1; n <= rows(y); ++n) { - - current_statement_begin__ = 255; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), beta_log(get_base1(y,n,"y",1),(get_base1(mu,n,"mu",1) * get_base1(mu_z,n,"mu_z",1)),((1 - get_base1(mu,n,"mu",1)) * get_base1(mu_z,n,"mu_z",1)))); - } - current_statement_begin__ = 257; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_beta_z_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& y, - const Eigen::Matrix& eta, - const Eigen::Matrix& eta_z, - const int& link, - const int& link_phi, std::ostream* pstream__) const { - return pw_beta_z(y, eta, eta_z, link, link_phi, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_binom(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 268; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 268; - return stan::math::promote_scalar(inv_logit(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 269; - return stan::math::promote_scalar(Phi(eta)); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 270; - return stan::math::promote_scalar(add(divide(atan(eta),stan::math::pi()),0.5)); - } else if (as_bool(logical_eq(link,4))) { - current_statement_begin__ = 271; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,5))) { - current_statement_begin__ = 272; - return stan::math::promote_scalar(inv_cloglog(eta)); - } else { - current_statement_begin__ = 273; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 273; - current_statement_begin__ = 274; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_binom(eta, link, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -ll_binom_lp(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 286; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 286; - lp_accum__.add(binomial_logit_log(y,trials,eta)); - } else if (as_bool(logical_lt(link,4))) { - current_statement_begin__ = 287; - lp_accum__.add(binomial_log(y,trials,linkinv_binom(eta,link, pstream__))); - } else if (as_bool(logical_eq(link,4))) { - - current_statement_begin__ = 289; - for (int n = 1; n <= num_elements(y); ++n) { - - current_statement_begin__ = 290; - lp_accum__.add((get_base1(y,n,"y",1) * get_base1(eta,n,"eta",1))); - current_statement_begin__ = 291; - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * log1m_exp(get_base1(eta,n,"eta",1)))); - current_statement_begin__ = 292; - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } else if (as_bool(logical_eq(link,5))) { - - current_statement_begin__ = 296; - for (int n = 1; n <= num_elements(y); ++n) { - { - fun_scalar_t__ neg_exp_eta; - (void) neg_exp_eta; // dummy to suppress unused var warning - - stan::math::initialize(neg_exp_eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(neg_exp_eta,DUMMY_VAR__); - stan::math::assign(neg_exp_eta,-(exp(get_base1(eta,n,"eta",1)))); - - - current_statement_begin__ = 298; - lp_accum__.add((get_base1(y,n,"y",1) * log1m_exp(neg_exp_eta))); - current_statement_begin__ = 299; - lp_accum__.add(((get_base1(trials,n,"trials",1) - get_base1(y,n,"y",1)) * neg_exp_eta)); - current_statement_begin__ = 300; - lp_accum__.add(binomial_coefficient_log(get_base1(trials,n,"trials",1),get_base1(y,n,"y",1))); - } - } - } else { - current_statement_begin__ = 303; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 303; - current_statement_begin__ = 304; - return stan::math::promote_scalar(get_lp(lp__, lp_accum__)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct ll_binom_lp_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return ll_binom_lp(y, trials, eta, link, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_binom(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 317; - if (as_bool(logical_eq(link,1))) { - - current_statement_begin__ = 318; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 319; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_logit_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,5))) { - { - validate_non_negative_index("pi", "N", N); - Eigen::Matrix pi(static_cast(N)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,linkinv_binom(eta,link, pstream__)); - - - current_statement_begin__ = 323; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 323; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), binomial_log(get_base1(y,n,"y",1),get_base1(trials,n,"trials",1),get_base1(pi,n,"pi",1))); - } - } - } else { - current_statement_begin__ = 325; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 325; - current_statement_begin__ = 326; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_binom_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const std::vector& trials, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_binom(y, trials, eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -linkinv_count(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 338; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 338; - return stan::math::promote_scalar(exp(eta)); - } else if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 339; - return stan::math::promote_scalar(eta); - } else if (as_bool(logical_eq(link,3))) { - current_statement_begin__ = 340; - return stan::math::promote_scalar(square(eta)); - } else { - current_statement_begin__ = 341; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 341; - current_statement_begin__ = 342; - return stan::math::promote_scalar(eta); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct linkinv_count_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return linkinv_count(eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_pois(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 356; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 357; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 357; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log_log(get_base1(y,n,"y",1),get_base1(eta,n,"eta",1))); - } - } else if (as_bool(logical_lte(link,3))) { - { - validate_non_negative_index("phi", "N", N); - Eigen::Matrix phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, std::numeric_limits::quiet_NaN()); - stan::math::fill(phi,DUMMY_VAR__); - stan::math::assign(phi,linkinv_count(eta,link, pstream__)); - - - current_statement_begin__ = 360; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 360; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), poisson_log(get_base1(y,n,"y",1),get_base1(phi,n,"phi",1))); - } - } - } else { - current_statement_begin__ = 362; - std::stringstream errmsg_stream__; - errmsg_stream__ << "Invalid link"; - throw std::domain_error(errmsg_stream__.str()); - } - current_statement_begin__ = 362; - current_statement_begin__ = 363; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_pois_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const int& link, std::ostream* pstream__) const { - return pw_pois(y, eta, link, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -pw_nb(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int N(0); - (void) N; // dummy to suppress unused var warning - - stan::math::fill(N, std::numeric_limits::min()); - stan::math::assign(N,rows(eta)); - validate_non_negative_index("rho", "N", N); - Eigen::Matrix rho(static_cast(N)); - (void) rho; // dummy to suppress unused var warning - - stan::math::initialize(rho, std::numeric_limits::quiet_NaN()); - stan::math::fill(rho,DUMMY_VAR__); - stan::math::assign(rho,linkinv_count(eta,link, pstream__)); - validate_non_negative_index("ll", "N", N); - Eigen::Matrix ll(static_cast(N)); - (void) ll; // dummy to suppress unused var warning - - stan::math::initialize(ll, std::numeric_limits::quiet_NaN()); - stan::math::fill(ll,DUMMY_VAR__); - - - current_statement_begin__ = 379; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 379; - stan::math::assign(get_base1_lhs(ll,n,"ll",1), neg_binomial_2_log(get_base1(y,n,"y",1),get_base1(rho,n,"rho",1),theta)); - } - current_statement_begin__ = 380; - return stan::math::promote_scalar(ll); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct pw_nb_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const std::vector& y, - const Eigen::Matrix& eta, - const T2__& theta, - const int& link, std::ostream* pstream__) const { - return pw_nb(y, eta, theta, link, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -make_theta_L(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("theta_L", "len_theta_L", len_theta_L); - Eigen::Matrix theta_L(static_cast(len_theta_L)); - (void) theta_L; // dummy to suppress unused var warning - - stan::math::initialize(theta_L, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L,DUMMY_VAR__); - int zeta_mark(0); - (void) zeta_mark; // dummy to suppress unused var warning - - stan::math::fill(zeta_mark, std::numeric_limits::min()); - stan::math::assign(zeta_mark,1); - int rho_mark(0); - (void) rho_mark; // dummy to suppress unused var warning - - stan::math::fill(rho_mark, std::numeric_limits::min()); - stan::math::assign(rho_mark,1); - int z_T_mark(0); - (void) z_T_mark; // dummy to suppress unused var warning - - stan::math::fill(z_T_mark, std::numeric_limits::min()); - stan::math::assign(z_T_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 411; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 413; - if (as_bool(logical_eq(nc,1))) { - - current_statement_begin__ = 414; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), ((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)); - current_statement_begin__ = 416; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - fun_scalar_t__ std_dev; - (void) std_dev; // dummy to suppress unused var warning - - stan::math::initialize(std_dev, std::numeric_limits::quiet_NaN()); - stan::math::fill(std_dev,DUMMY_VAR__); - fun_scalar_t__ T21; - (void) T21; // dummy to suppress unused var warning - - stan::math::initialize(T21, std::numeric_limits::quiet_NaN()); - stan::math::fill(T21,DUMMY_VAR__); - fun_scalar_t__ trace_T_i; - (void) trace_T_i; // dummy to suppress unused var warning - - stan::math::initialize(trace_T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(trace_T_i,DUMMY_VAR__); - stan::math::assign(trace_T_i,(square(((get_base1(tau,i,"tau",1) * get_base1(scale,i,"scale",1)) * dispersion)) * nc)); - validate_non_negative_index("pi", "nc", nc); - Eigen::Matrix pi(static_cast(nc)); - (void) pi; // dummy to suppress unused var warning - - stan::math::initialize(pi, std::numeric_limits::quiet_NaN()); - stan::math::fill(pi,DUMMY_VAR__); - stan::math::assign(pi,segment(zeta,zeta_mark,nc)); - - - current_statement_begin__ = 424; - stan::math::assign(pi, divide(pi,sum(pi))); - current_statement_begin__ = 427; - stan::math::assign(zeta_mark, (zeta_mark + nc)); - current_statement_begin__ = 428; - stan::math::assign(std_dev, sqrt((get_base1(pi,1,"pi",1) * trace_T_i))); - current_statement_begin__ = 429; - stan::math::assign(get_base1_lhs(T_i,1,1,"T_i",1), std_dev); - current_statement_begin__ = 432; - stan::math::assign(std_dev, sqrt((get_base1(pi,2,"pi",1) * trace_T_i))); - current_statement_begin__ = 433; - stan::math::assign(T21, ((2.0 * get_base1(rho,rho_mark,"rho",1)) - 1.0)); - current_statement_begin__ = 434; - stan::math::assign(rho_mark, (rho_mark + 1)); - current_statement_begin__ = 435; - stan::math::assign(get_base1_lhs(T_i,2,2,"T_i",1), (std_dev * sqrt((1.0 - square(T21))))); - current_statement_begin__ = 436; - stan::math::assign(get_base1_lhs(T_i,2,1,"T_i",1), (std_dev * T21)); - current_statement_begin__ = 438; - for (int r = 2; r <= (nc - 1); ++r) { - { - int rp1(0); - (void) rp1; // dummy to suppress unused var warning - - stan::math::fill(rp1, std::numeric_limits::min()); - stan::math::assign(rp1,(r + 1)); - validate_non_negative_index("T_row", "r", r); - Eigen::Matrix T_row(static_cast(r)); - (void) T_row; // dummy to suppress unused var warning - - stan::math::initialize(T_row, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_row,DUMMY_VAR__); - stan::math::assign(T_row,segment(z_T,z_T_mark,r)); - fun_scalar_t__ scale_factor; - (void) scale_factor; // dummy to suppress unused var warning - - stan::math::initialize(scale_factor, std::numeric_limits::quiet_NaN()); - stan::math::fill(scale_factor,DUMMY_VAR__); - stan::math::assign(scale_factor,(sqrt((get_base1(rho,rho_mark,"rho",1) / dot_self(T_row))) * std_dev)); - - - current_statement_begin__ = 442; - stan::math::assign(z_T_mark, (z_T_mark + r)); - current_statement_begin__ = 443; - stan::math::assign(std_dev, sqrt((get_base1(pi,rp1,"pi",1) * trace_T_i))); - current_statement_begin__ = 444; - for (int c = 1; c <= r; ++c) { - current_statement_begin__ = 444; - stan::math::assign(get_base1_lhs(T_i,rp1,c,"T_i",1), (get_base1(T_row,c,"T_row",1) * scale_factor)); - } - current_statement_begin__ = 445; - stan::math::assign(get_base1_lhs(T_i,rp1,rp1,"T_i",1), (sqrt((1.0 - get_base1(rho,rho_mark,"rho",1))) * std_dev)); - current_statement_begin__ = 446; - stan::math::assign(rho_mark, (rho_mark + 1)); - } - } - current_statement_begin__ = 450; - for (int c = 1; c <= nc; ++c) { - current_statement_begin__ = 450; - for (int r = c; r <= nc; ++r) { - - current_statement_begin__ = 451; - stan::math::assign(get_base1_lhs(theta_L,theta_L_mark,"theta_L",1), get_base1(T_i,r,c,"T_i",1)); - current_statement_begin__ = 452; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - } - } - } - } - current_statement_begin__ = 456; - return stan::math::promote_scalar(theta_L); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_theta_L_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const int& len_theta_L, - const std::vector& p, - const T2__& dispersion, - const Eigen::Matrix& tau, - const Eigen::Matrix& scale, - const Eigen::Matrix& zeta, - const Eigen::Matrix& rho, - const Eigen::Matrix& z_T, std::ostream* pstream__) const { - return make_theta_L(len_theta_L, p, dispersion, tau, scale, zeta, rho, z_T, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -make_b(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("b", "rows(z_b)", rows(z_b)); - Eigen::Matrix b(static_cast(rows(z_b))); - (void) b; // dummy to suppress unused var warning - - stan::math::initialize(b, std::numeric_limits::quiet_NaN()); - stan::math::fill(b,DUMMY_VAR__); - int b_mark(0); - (void) b_mark; // dummy to suppress unused var warning - - stan::math::fill(b_mark, std::numeric_limits::min()); - stan::math::assign(b_mark,1); - int theta_L_mark(0); - (void) theta_L_mark; // dummy to suppress unused var warning - - stan::math::fill(theta_L_mark, std::numeric_limits::min()); - stan::math::assign(theta_L_mark,1); - - - current_statement_begin__ = 474; - for (int i = 1; i <= size(p); ++i) { - { - int nc(0); - (void) nc; // dummy to suppress unused var warning - - stan::math::fill(nc, std::numeric_limits::min()); - stan::math::assign(nc,get_base1(p,i,"p",1)); - - - current_statement_begin__ = 476; - if (as_bool(logical_eq(nc,1))) { - { - fun_scalar_t__ theta_L_start; - (void) theta_L_start; // dummy to suppress unused var warning - - stan::math::initialize(theta_L_start, std::numeric_limits::quiet_NaN()); - stan::math::fill(theta_L_start,DUMMY_VAR__); - stan::math::assign(theta_L_start,get_base1(theta_L,theta_L_mark,"theta_L",1)); - - - current_statement_begin__ = 478; - for (int s = b_mark; s <= ((b_mark + get_base1(l,i,"l",1)) - 1); ++s) { - current_statement_begin__ = 479; - stan::math::assign(get_base1_lhs(b,s,"b",1), (theta_L_start * get_base1(z_b,s,"z_b",1))); - } - current_statement_begin__ = 480; - stan::math::assign(b_mark, (b_mark + get_base1(l,i,"l",1))); - current_statement_begin__ = 481; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } else { - { - validate_non_negative_index("T_i", "nc", nc); - validate_non_negative_index("T_i", "nc", nc); - Eigen::Matrix T_i(static_cast(nc),static_cast(nc)); - (void) T_i; // dummy to suppress unused var warning - - stan::math::initialize(T_i, std::numeric_limits::quiet_NaN()); - stan::math::fill(T_i,DUMMY_VAR__); - stan::math::assign(T_i,rep_matrix(0,nc,nc)); - - - current_statement_begin__ = 485; - for (int c = 1; c <= nc; ++c) { - - current_statement_begin__ = 486; - stan::math::assign(get_base1_lhs(T_i,c,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 487; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - current_statement_begin__ = 488; - for (int r = (c + 1); r <= nc; ++r) { - - current_statement_begin__ = 489; - stan::math::assign(get_base1_lhs(T_i,r,c,"T_i",1), get_base1(theta_L,theta_L_mark,"theta_L",1)); - current_statement_begin__ = 490; - stan::math::assign(theta_L_mark, (theta_L_mark + 1)); - } - } - current_statement_begin__ = 493; - for (int j = 1; j <= get_base1(l,i,"l",1); ++j) { - { - validate_non_negative_index("temp", "nc", nc); - Eigen::Matrix temp(static_cast(nc)); - (void) temp; // dummy to suppress unused var warning - - stan::math::initialize(temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(temp,DUMMY_VAR__); - stan::math::assign(temp,multiply(T_i,segment(z_b,b_mark,nc))); - - - current_statement_begin__ = 495; - stan::math::assign(b_mark, (b_mark - 1)); - current_statement_begin__ = 496; - for (int s = 1; s <= nc; ++s) { - current_statement_begin__ = 496; - stan::math::assign(get_base1_lhs(b,(b_mark + s),"b",1), get_base1(temp,s,"temp",1)); - } - current_statement_begin__ = 497; - stan::math::assign(b_mark, ((b_mark + nc) + 1)); - } - } - } - } - } - } - current_statement_begin__ = 501; - return stan::math::promote_scalar(b); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_b_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& theta_L, - const std::vector& p, - const std::vector& l, std::ostream* pstream__) const { - return make_b(z_b, theta_L, p, l, pstream__); - } -}; - -template -void -decov_lp(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int pos_reg(0); - (void) pos_reg; // dummy to suppress unused var warning - - stan::math::fill(pos_reg, std::numeric_limits::min()); - stan::math::assign(pos_reg,1); - int pos_rho(0); - (void) pos_rho; // dummy to suppress unused var warning - - stan::math::fill(pos_rho, std::numeric_limits::min()); - stan::math::assign(pos_rho,1); - - - current_statement_begin__ = 524; - lp_accum__.add(normal_log(z_b,0,1)); - current_statement_begin__ = 525; - lp_accum__.add(normal_log(z_T,0,1)); - current_statement_begin__ = 526; - for (int i = 1; i <= t; ++i) { - current_statement_begin__ = 526; - if (as_bool(logical_gt(get_base1(p,i,"p",1),1))) { - { - validate_non_negative_index("shape1", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape1(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape1; // dummy to suppress unused var warning - - stan::math::initialize(shape1, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape1,DUMMY_VAR__); - validate_non_negative_index("shape2", "(get_base1(p,i,\"p\",1) - 1)", (get_base1(p,i,"p",1) - 1)); - Eigen::Matrix shape2(static_cast((get_base1(p,i,"p",1) - 1))); - (void) shape2; // dummy to suppress unused var warning - - stan::math::initialize(shape2, std::numeric_limits::quiet_NaN()); - stan::math::fill(shape2,DUMMY_VAR__); - fun_scalar_t__ nu; - (void) nu; // dummy to suppress unused var warning - - stan::math::initialize(nu, std::numeric_limits::quiet_NaN()); - stan::math::fill(nu,DUMMY_VAR__); - stan::math::assign(nu,(get_base1(regularization,pos_reg,"regularization",1) + (0.5 * (get_base1(p,i,"p",1) - 2)))); - - - current_statement_begin__ = 530; - stan::math::assign(pos_reg, (pos_reg + 1)); - current_statement_begin__ = 531; - stan::math::assign(get_base1_lhs(shape1,1,"shape1",1), nu); - current_statement_begin__ = 532; - stan::math::assign(get_base1_lhs(shape2,1,"shape2",1), nu); - current_statement_begin__ = 533; - for (int j = 2; j <= (get_base1(p,i,"p",1) - 1); ++j) { - - current_statement_begin__ = 534; - stan::math::assign(nu, (nu - 0.5)); - current_statement_begin__ = 535; - stan::math::assign(get_base1_lhs(shape1,j,"shape1",1), (0.5 * j)); - current_statement_begin__ = 536; - stan::math::assign(get_base1_lhs(shape2,j,"shape2",1), nu); - } - current_statement_begin__ = 538; - lp_accum__.add(beta_log(stan::model::rvalue(rho, stan::model::cons_list(stan::model::index_min_max(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 2)), stan::model::nil_index_list()), "rho"),shape1,shape2)); - current_statement_begin__ = 539; - stan::math::assign(pos_rho, ((pos_rho + get_base1(p,i,"p",1)) - 1)); - } - } - } - current_statement_begin__ = 541; - lp_accum__.add(gamma_log(zeta,delta,1)); - current_statement_begin__ = 542; - lp_accum__.add(gamma_log(tau,shape,1)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct decov_lp_functor__ { - template - void - operator()(const Eigen::Matrix& z_b, - const Eigen::Matrix& z_T, - const Eigen::Matrix& rho, - const Eigen::Matrix& zeta, - const Eigen::Matrix& tau, - const std::vector& regularization, - const std::vector& delta, - const Eigen::Matrix& shape, - const int& t, - const std::vector& p, T_lp__& lp__, T_lp_accum__& lp_accum__, std::ostream* pstream__) const { - return decov_lp(z_b, z_T, rho, zeta, tau, regularization, delta, shape, t, p, lp__, lp_accum__, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hs_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("lambda", "rows(z_beta)", rows(z_beta)); - Eigen::Matrix lambda(static_cast(rows(z_beta))); - (void) lambda; // dummy to suppress unused var warning - - stan::math::initialize(lambda, std::numeric_limits::quiet_NaN()); - stan::math::fill(lambda,DUMMY_VAR__); - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - - - current_statement_begin__ = 559; - stan::math::assign(K, rows(z_beta)); - current_statement_begin__ = 560; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 560; - stan::math::assign(get_base1_lhs(lambda,k,"lambda",1), (get_base1(get_base1(local,1,"local",1),k,"local",2) * sqrt(get_base1(get_base1(local,2,"local",1),k,"local",2)))); - } - current_statement_begin__ = 561; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(z_beta,lambda),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hs_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hs_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type>::type, Eigen::Dynamic,1> -hsplus_prior(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type>::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 577; - return stan::math::promote_scalar(multiply(multiply(multiply(multiply(elt_multiply(elt_multiply(z_beta,elt_multiply(get_base1(local,1,"local",1),sqrt(get_base1(local,2,"local",1)))),elt_multiply(get_base1(local,3,"local",1),sqrt(get_base1(local,4,"local",1)))),get_base1(global,1,"global",1)),sqrt(get_base1(global,2,"global",1))),global_prior_scale),error_scale)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct hsplus_prior_functor__ { - template - Eigen::Matrix::type>::type, Eigen::Dynamic,1> - operator()(const Eigen::Matrix& z_beta, - const std::vector& global, - const std::vector >& local, - const T3__& global_prior_scale, - const T4__& error_scale, std::ostream* pstream__) const { - return hsplus_prior(z_beta, global, local, global_prior_scale, error_scale, pstream__); - } -}; - -template -Eigen::Matrix::type, Eigen::Dynamic,1> -divide_real_by_vector(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - int K(0); - (void) K; // dummy to suppress unused var warning - - stan::math::fill(K, std::numeric_limits::min()); - stan::math::assign(K,rows(y)); - validate_non_negative_index("ret", "K", K); - Eigen::Matrix ret(static_cast(K)); - (void) ret; // dummy to suppress unused var warning - - stan::math::initialize(ret, std::numeric_limits::quiet_NaN()); - stan::math::fill(ret,DUMMY_VAR__); - - - current_statement_begin__ = 592; - for (int k = 1; k <= K; ++k) { - current_statement_begin__ = 592; - stan::math::assign(get_base1_lhs(ret,k,"ret",1), (x / get_base1(y,k,"y",1))); - } - current_statement_begin__ = 593; - return stan::math::promote_scalar(ret); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct divide_real_by_vector_functor__ { - template - Eigen::Matrix::type, Eigen::Dynamic,1> - operator()(const T0__& x, - const Eigen::Matrix& y, std::ostream* pstream__) const { - return divide_real_by_vector(x, y, pstream__); - } -}; - -template -typename boost::math::tools::promote_args::type -CFt(const T0__& z, - const T1__& df, std::ostream* pstream__) { - typedef typename boost::math::tools::promote_args::type fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - fun_scalar_t__ z2; - (void) z2; // dummy to suppress unused var warning - - stan::math::initialize(z2, std::numeric_limits::quiet_NaN()); - stan::math::fill(z2,DUMMY_VAR__); - stan::math::assign(z2,square(z)); - fun_scalar_t__ z3; - (void) z3; // dummy to suppress unused var warning - - stan::math::initialize(z3, std::numeric_limits::quiet_NaN()); - stan::math::fill(z3,DUMMY_VAR__); - stan::math::assign(z3,(z2 * z)); - fun_scalar_t__ z5; - (void) z5; // dummy to suppress unused var warning - - stan::math::initialize(z5, std::numeric_limits::quiet_NaN()); - stan::math::fill(z5,DUMMY_VAR__); - stan::math::assign(z5,(z2 * z3)); - fun_scalar_t__ z7; - (void) z7; // dummy to suppress unused var warning - - stan::math::initialize(z7, std::numeric_limits::quiet_NaN()); - stan::math::fill(z7,DUMMY_VAR__); - stan::math::assign(z7,(z2 * z5)); - fun_scalar_t__ z9; - (void) z9; // dummy to suppress unused var warning - - stan::math::initialize(z9, std::numeric_limits::quiet_NaN()); - stan::math::fill(z9,DUMMY_VAR__); - stan::math::assign(z9,(z2 * z7)); - fun_scalar_t__ df2; - (void) df2; // dummy to suppress unused var warning - - stan::math::initialize(df2, std::numeric_limits::quiet_NaN()); - stan::math::fill(df2,DUMMY_VAR__); - stan::math::assign(df2,square(df)); - fun_scalar_t__ df3; - (void) df3; // dummy to suppress unused var warning - - stan::math::initialize(df3, std::numeric_limits::quiet_NaN()); - stan::math::fill(df3,DUMMY_VAR__); - stan::math::assign(df3,(df2 * df)); - fun_scalar_t__ df4; - (void) df4; // dummy to suppress unused var warning - - stan::math::initialize(df4, std::numeric_limits::quiet_NaN()); - stan::math::fill(df4,DUMMY_VAR__); - stan::math::assign(df4,(df2 * df2)); - - - current_statement_begin__ = 615; - return stan::math::promote_scalar(((((z + ((z3 + z) / (4 * df))) + ((((5 * z5) + (16 * z3)) + (3 * z)) / (96 * df2))) + (((((3 * z7) + (19 * z5)) + (17 * z3)) - (15 * z)) / (384 * df3))) + ((((((79 * z9) + (776 * z7)) + (1482 * z5)) - (1920 * z3)) - (945 * z)) / (92160 * df4)))); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct CFt_functor__ { - template - typename boost::math::tools::promote_args::type - operator()(const T0__& z, - const T1__& df, std::ostream* pstream__) const { - return CFt(z, df, pstream__); - } -}; - -std::vector > -make_V(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef int fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - { - validate_non_negative_index("V", "t", t); - validate_non_negative_index("V", "N", N); - vector > V(t, (vector(N, 0))); - stan::math::fill(V, std::numeric_limits::min()); - int pos(0); - (void) pos; // dummy to suppress unused var warning - - stan::math::fill(pos, std::numeric_limits::min()); - stan::math::assign(pos,1); - - - current_statement_begin__ = 630; - if (as_bool(logical_gt(t,0))) { - current_statement_begin__ = 630; - for (int j = 1; j <= N; ++j) { - current_statement_begin__ = 630; - for (int i = 1; i <= t; ++i) { - - current_statement_begin__ = 631; - stan::math::assign(get_base1_lhs(get_base1_lhs(V,i,"V",1),j,"V",2), get_base1(v,pos,"v",1)); - current_statement_begin__ = 632; - stan::math::assign(pos, (pos + 1)); - } - } - } - current_statement_begin__ = 634; - return stan::math::promote_scalar(V); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_V_functor__ { - std::vector > - operator()(const int& N, - const int& t, - const std::vector& v, std::ostream* pstream__) const { - return make_V(N, t, v, pstream__); - } -}; - -double -make_lower(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 645; - if (as_bool(logical_eq(family,1))) { - current_statement_begin__ = 645; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - current_statement_begin__ = 646; - if (as_bool(logical_eq(family,5))) { - - current_statement_begin__ = 647; - if (as_bool(logical_eq(link,2))) { - current_statement_begin__ = 647; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - current_statement_begin__ = 648; - return stan::math::promote_scalar(0); - } - current_statement_begin__ = 650; - if (as_bool((primitive_value(logical_eq(family,2)) || primitive_value(logical_eq(family,3))))) { - - current_statement_begin__ = 651; - if (as_bool(logical_eq(link,1))) { - current_statement_begin__ = 651; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } - current_statement_begin__ = 652; - return stan::math::promote_scalar(0.0); - } - current_statement_begin__ = 654; - return stan::math::promote_scalar(stan::math::negative_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_lower_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_lower(family, link, pstream__); - } -}; - -double -make_upper(const int& family, - const int& link, std::ostream* pstream__) { - typedef double fun_scalar_t__; - typedef fun_scalar_t__ fun_return_scalar_t__; - const static bool propto__ = true; - (void) propto__; - fun_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - int current_statement_begin__ = -1; - try { - - current_statement_begin__ = 665; - if (as_bool((primitive_value(logical_eq(family,4)) && primitive_value(logical_eq(link,4))))) { - current_statement_begin__ = 665; - return stan::math::promote_scalar(0.0); - } - current_statement_begin__ = 666; - return stan::math::promote_scalar(stan::math::positive_infinity()); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } -} - - -struct make_upper_functor__ { - double - operator()(const int& family, - const int& link, std::ostream* pstream__) const { - return make_upper(family, link, pstream__); - } -}; - -class model_spatial : public prob_grad { -private: - int N; - int K; - matrix_d X; - int family; - int link; - int is_continuous; - int has_aux; - int model_type; - int has_intercept; - vector_d xbar; - vector trials; - vector y_int; - vector_d y_real; - int E_n; - vector > edges; - int order; - vector Q_n; - vector_d w; - vector v; - vector u; - int prior_dist_rho; - double prior_mean_rho; - double prior_scale_rho; - double prior_df_rho; - double shape1_rho; - double shape2_rho; - double scaling_factor; - int prior_dist_for_intercept; - int prior_dist; - int prior_dist_tau; - double prior_mean_for_intercept; - double prior_scale_for_intercept; - double prior_df_for_intercept; - vector_d prior_mean; - vector_d prior_scale; - vector_d prior_df; - double prior_mean_tau; - double prior_scale_tau; - double prior_df_tau; - double global_prior_df; - double global_prior_scale; - vector num_normals; - int prior_dist_for_aux; - double prior_mean_for_aux; - double prior_scale_for_aux; - double prior_df_for_aux; - double poisson_max; - int hs; - double sum_log_y; -public: - model_spatial(stan::io::var_context& context__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, 0, pstream__); - } - - model_spatial(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__ = 0) - : prob_grad(0) { - ctor_body(context__, random_seed__, pstream__); - } - - void ctor_body(stan::io::var_context& context__, - unsigned int random_seed__, - std::ostream* pstream__) { - boost::ecuyer1988 base_rng__ = - stan::services::util::create_rng(random_seed__, 0); - (void) base_rng__; // suppress unused var warning - - current_statement_begin__ = -1; - - static const char* function__ = "model_spatial_namespace::model_spatial"; - (void) function__; // dummy to suppress unused var warning - size_t pos__; - (void) pos__; // dummy to suppress unused var warning - std::vector vals_i__; - std::vector vals_r__; - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - // initialize member variables - context__.validate_dims("data initialization", "N", "int", context__.to_vec()); - N = int(0); - vals_i__ = context__.vals_i("N"); - pos__ = 0; - N = vals_i__[pos__++]; - context__.validate_dims("data initialization", "K", "int", context__.to_vec()); - K = int(0); - vals_i__ = context__.vals_i("K"); - pos__ = 0; - K = vals_i__[pos__++]; - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - context__.validate_dims("data initialization", "X", "matrix_d", context__.to_vec(N,K)); - validate_non_negative_index("X", "N", N); - validate_non_negative_index("X", "K", K); - X = matrix_d(static_cast(N),static_cast(K)); - vals_r__ = context__.vals_r("X"); - pos__ = 0; - size_t X_m_mat_lim__ = N; - size_t X_n_mat_lim__ = K; - for (size_t n_mat__ = 0; n_mat__ < X_n_mat_lim__; ++n_mat__) { - for (size_t m_mat__ = 0; m_mat__ < X_m_mat_lim__; ++m_mat__) { - X(m_mat__,n_mat__) = vals_r__[pos__++]; - } - } - context__.validate_dims("data initialization", "family", "int", context__.to_vec()); - family = int(0); - vals_i__ = context__.vals_i("family"); - pos__ = 0; - family = vals_i__[pos__++]; - context__.validate_dims("data initialization", "link", "int", context__.to_vec()); - link = int(0); - vals_i__ = context__.vals_i("link"); - pos__ = 0; - link = vals_i__[pos__++]; - context__.validate_dims("data initialization", "is_continuous", "int", context__.to_vec()); - is_continuous = int(0); - vals_i__ = context__.vals_i("is_continuous"); - pos__ = 0; - is_continuous = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_aux", "int", context__.to_vec()); - has_aux = int(0); - vals_i__ = context__.vals_i("has_aux"); - pos__ = 0; - has_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "model_type", "int", context__.to_vec()); - model_type = int(0); - vals_i__ = context__.vals_i("model_type"); - pos__ = 0; - model_type = vals_i__[pos__++]; - context__.validate_dims("data initialization", "has_intercept", "int", context__.to_vec()); - has_intercept = int(0); - vals_i__ = context__.vals_i("has_intercept"); - pos__ = 0; - has_intercept = vals_i__[pos__++]; - validate_non_negative_index("xbar", "K", K); - context__.validate_dims("data initialization", "xbar", "vector_d", context__.to_vec(K)); - validate_non_negative_index("xbar", "K", K); - xbar = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("xbar"); - pos__ = 0; - size_t xbar_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < xbar_i_vec_lim__; ++i_vec__) { - xbar[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("trials", "(logical_eq(family,4) ? N : 0 )", (logical_eq(family,4) ? N : 0 )); - context__.validate_dims("data initialization", "trials", "int", context__.to_vec((logical_eq(family,4) ? N : 0 ))); - validate_non_negative_index("trials", "(logical_eq(family,4) ? N : 0 )", (logical_eq(family,4) ? N : 0 )); - trials = std::vector((logical_eq(family,4) ? N : 0 ),int(0)); - vals_i__ = context__.vals_i("trials"); - pos__ = 0; - size_t trials_limit_0__ = (logical_eq(family,4) ? N : 0 ); - for (size_t i_0__ = 0; i_0__ < trials_limit_0__; ++i_0__) { - trials[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y_int", "(logical_eq(is_continuous,1) ? 0 : N )", (logical_eq(is_continuous,1) ? 0 : N )); - context__.validate_dims("data initialization", "y_int", "int", context__.to_vec((logical_eq(is_continuous,1) ? 0 : N ))); - validate_non_negative_index("y_int", "(logical_eq(is_continuous,1) ? 0 : N )", (logical_eq(is_continuous,1) ? 0 : N )); - y_int = std::vector((logical_eq(is_continuous,1) ? 0 : N ),int(0)); - vals_i__ = context__.vals_i("y_int"); - pos__ = 0; - size_t y_int_limit_0__ = (logical_eq(is_continuous,1) ? 0 : N ); - for (size_t i_0__ = 0; i_0__ < y_int_limit_0__; ++i_0__) { - y_int[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("y_real", "(logical_eq(is_continuous,1) ? N : 0 )", (logical_eq(is_continuous,1) ? N : 0 )); - context__.validate_dims("data initialization", "y_real", "vector_d", context__.to_vec((logical_eq(is_continuous,1) ? N : 0 ))); - validate_non_negative_index("y_real", "(logical_eq(is_continuous,1) ? N : 0 )", (logical_eq(is_continuous,1) ? N : 0 )); - y_real = vector_d(static_cast((logical_eq(is_continuous,1) ? N : 0 ))); - vals_r__ = context__.vals_r("y_real"); - pos__ = 0; - size_t y_real_i_vec_lim__ = (logical_eq(is_continuous,1) ? N : 0 ); - for (size_t i_vec__ = 0; i_vec__ < y_real_i_vec_lim__; ++i_vec__) { - y_real[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "E_n", "int", context__.to_vec()); - E_n = int(0); - vals_i__ = context__.vals_i("E_n"); - pos__ = 0; - E_n = vals_i__[pos__++]; - validate_non_negative_index("edges", "E_n", E_n); - validate_non_negative_index("edges", "2", 2); - context__.validate_dims("data initialization", "edges", "int", context__.to_vec(E_n,2)); - validate_non_negative_index("edges", "E_n", E_n); - validate_non_negative_index("edges", "2", 2); - edges = std::vector >(E_n,std::vector(2,int(0))); - vals_i__ = context__.vals_i("edges"); - pos__ = 0; - size_t edges_limit_1__ = 2; - for (size_t i_1__ = 0; i_1__ < edges_limit_1__; ++i_1__) { - size_t edges_limit_0__ = E_n; - for (size_t i_0__ = 0; i_0__ < edges_limit_0__; ++i_0__) { - edges[i_0__][i_1__] = vals_i__[pos__++]; - } - } - context__.validate_dims("data initialization", "order", "int", context__.to_vec()); - order = int(0); - vals_i__ = context__.vals_i("order"); - pos__ = 0; - order = vals_i__[pos__++]; - validate_non_negative_index("Q_n", "logical_eq(order,2)", logical_eq(order,2)); - context__.validate_dims("data initialization", "Q_n", "int", context__.to_vec(logical_eq(order,2))); - validate_non_negative_index("Q_n", "logical_eq(order,2)", logical_eq(order,2)); - Q_n = std::vector(logical_eq(order,2),int(0)); - vals_i__ = context__.vals_i("Q_n"); - pos__ = 0; - size_t Q_n_limit_0__ = logical_eq(order,2); - for (size_t i_0__ = 0; i_0__ < Q_n_limit_0__; ++i_0__) { - Q_n[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("w", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - context__.validate_dims("data initialization", "w", "vector_d", context__.to_vec((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ))); - validate_non_negative_index("w", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - w = vector_d(static_cast((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ))); - vals_r__ = context__.vals_r("w"); - pos__ = 0; - size_t w_i_vec_lim__ = (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ); - for (size_t i_vec__ = 0; i_vec__ < w_i_vec_lim__; ++i_vec__) { - w[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("v", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - context__.validate_dims("data initialization", "v", "int", context__.to_vec((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ))); - validate_non_negative_index("v", "(logical_eq(order,2) ? get_base1(Q_n,1,\"Q_n\",1) : 0 )", (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 )); - v = std::vector((logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ),int(0)); - vals_i__ = context__.vals_i("v"); - pos__ = 0; - size_t v_limit_0__ = (logical_eq(order,2) ? get_base1(Q_n,1,"Q_n",1) : 0 ); - for (size_t i_0__ = 0; i_0__ < v_limit_0__; ++i_0__) { - v[i_0__] = vals_i__[pos__++]; - } - validate_non_negative_index("u", "(logical_eq(order,2) ? (N + 1) : 0 )", (logical_eq(order,2) ? (N + 1) : 0 )); - context__.validate_dims("data initialization", "u", "int", context__.to_vec((logical_eq(order,2) ? (N + 1) : 0 ))); - validate_non_negative_index("u", "(logical_eq(order,2) ? (N + 1) : 0 )", (logical_eq(order,2) ? (N + 1) : 0 )); - u = std::vector((logical_eq(order,2) ? (N + 1) : 0 ),int(0)); - vals_i__ = context__.vals_i("u"); - pos__ = 0; - size_t u_limit_0__ = (logical_eq(order,2) ? (N + 1) : 0 ); - for (size_t i_0__ = 0; i_0__ < u_limit_0__; ++i_0__) { - u[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_dist_rho", "int", context__.to_vec()); - prior_dist_rho = int(0); - vals_i__ = context__.vals_i("prior_dist_rho"); - pos__ = 0; - prior_dist_rho = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_rho", "double", context__.to_vec()); - prior_mean_rho = double(0); - vals_r__ = context__.vals_r("prior_mean_rho"); - pos__ = 0; - prior_mean_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_rho", "double", context__.to_vec()); - prior_scale_rho = double(0); - vals_r__ = context__.vals_r("prior_scale_rho"); - pos__ = 0; - prior_scale_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_rho", "double", context__.to_vec()); - prior_df_rho = double(0); - vals_r__ = context__.vals_r("prior_df_rho"); - pos__ = 0; - prior_df_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "shape1_rho", "double", context__.to_vec()); - shape1_rho = double(0); - vals_r__ = context__.vals_r("shape1_rho"); - pos__ = 0; - shape1_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "shape2_rho", "double", context__.to_vec()); - shape2_rho = double(0); - vals_r__ = context__.vals_r("shape2_rho"); - pos__ = 0; - shape2_rho = vals_r__[pos__++]; - context__.validate_dims("data initialization", "scaling_factor", "double", context__.to_vec()); - scaling_factor = double(0); - vals_r__ = context__.vals_r("scaling_factor"); - pos__ = 0; - scaling_factor = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_for_intercept", "int", context__.to_vec()); - prior_dist_for_intercept = int(0); - vals_i__ = context__.vals_i("prior_dist_for_intercept"); - pos__ = 0; - prior_dist_for_intercept = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist", "int", context__.to_vec()); - prior_dist = int(0); - vals_i__ = context__.vals_i("prior_dist"); - pos__ = 0; - prior_dist = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_dist_tau", "int", context__.to_vec()); - prior_dist_tau = int(0); - vals_i__ = context__.vals_i("prior_dist_tau"); - pos__ = 0; - prior_dist_tau = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_intercept", "double", context__.to_vec()); - prior_mean_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_mean_for_intercept"); - pos__ = 0; - prior_mean_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_intercept", "double", context__.to_vec()); - prior_scale_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_scale_for_intercept"); - pos__ = 0; - prior_scale_for_intercept = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_intercept", "double", context__.to_vec()); - prior_df_for_intercept = double(0); - vals_r__ = context__.vals_r("prior_df_for_intercept"); - pos__ = 0; - prior_df_for_intercept = vals_r__[pos__++]; - validate_non_negative_index("prior_mean", "K", K); - context__.validate_dims("data initialization", "prior_mean", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_mean", "K", K); - prior_mean = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_mean"); - pos__ = 0; - size_t prior_mean_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_mean_i_vec_lim__; ++i_vec__) { - prior_mean[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_scale", "K", K); - context__.validate_dims("data initialization", "prior_scale", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_scale", "K", K); - prior_scale = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_scale"); - pos__ = 0; - size_t prior_scale_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_scale_i_vec_lim__; ++i_vec__) { - prior_scale[i_vec__] = vals_r__[pos__++]; - } - validate_non_negative_index("prior_df", "K", K); - context__.validate_dims("data initialization", "prior_df", "vector_d", context__.to_vec(K)); - validate_non_negative_index("prior_df", "K", K); - prior_df = vector_d(static_cast(K)); - vals_r__ = context__.vals_r("prior_df"); - pos__ = 0; - size_t prior_df_i_vec_lim__ = K; - for (size_t i_vec__ = 0; i_vec__ < prior_df_i_vec_lim__; ++i_vec__) { - prior_df[i_vec__] = vals_r__[pos__++]; - } - context__.validate_dims("data initialization", "prior_mean_tau", "double", context__.to_vec()); - prior_mean_tau = double(0); - vals_r__ = context__.vals_r("prior_mean_tau"); - pos__ = 0; - prior_mean_tau = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_tau", "double", context__.to_vec()); - prior_scale_tau = double(0); - vals_r__ = context__.vals_r("prior_scale_tau"); - pos__ = 0; - prior_scale_tau = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_tau", "double", context__.to_vec()); - prior_df_tau = double(0); - vals_r__ = context__.vals_r("prior_df_tau"); - pos__ = 0; - prior_df_tau = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_df", "double", context__.to_vec()); - global_prior_df = double(0); - vals_r__ = context__.vals_r("global_prior_df"); - pos__ = 0; - global_prior_df = vals_r__[pos__++]; - context__.validate_dims("data initialization", "global_prior_scale", "double", context__.to_vec()); - global_prior_scale = double(0); - vals_r__ = context__.vals_r("global_prior_scale"); - pos__ = 0; - global_prior_scale = vals_r__[pos__++]; - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - context__.validate_dims("data initialization", "num_normals", "int", context__.to_vec((logical_eq(prior_dist,7) ? K : 0 ))); - validate_non_negative_index("num_normals", "(logical_eq(prior_dist,7) ? K : 0 )", (logical_eq(prior_dist,7) ? K : 0 )); - num_normals = std::vector((logical_eq(prior_dist,7) ? K : 0 ),int(0)); - vals_i__ = context__.vals_i("num_normals"); - pos__ = 0; - size_t num_normals_limit_0__ = (logical_eq(prior_dist,7) ? K : 0 ); - for (size_t i_0__ = 0; i_0__ < num_normals_limit_0__; ++i_0__) { - num_normals[i_0__] = vals_i__[pos__++]; - } - context__.validate_dims("data initialization", "prior_dist_for_aux", "int", context__.to_vec()); - prior_dist_for_aux = int(0); - vals_i__ = context__.vals_i("prior_dist_for_aux"); - pos__ = 0; - prior_dist_for_aux = vals_i__[pos__++]; - context__.validate_dims("data initialization", "prior_mean_for_aux", "double", context__.to_vec()); - prior_mean_for_aux = double(0); - vals_r__ = context__.vals_r("prior_mean_for_aux"); - pos__ = 0; - prior_mean_for_aux = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_scale_for_aux", "double", context__.to_vec()); - prior_scale_for_aux = double(0); - vals_r__ = context__.vals_r("prior_scale_for_aux"); - pos__ = 0; - prior_scale_for_aux = vals_r__[pos__++]; - context__.validate_dims("data initialization", "prior_df_for_aux", "double", context__.to_vec()); - prior_df_for_aux = double(0); - vals_r__ = context__.vals_r("prior_df_for_aux"); - pos__ = 0; - prior_df_for_aux = vals_r__[pos__++]; - - // validate, data variables - check_greater_or_equal(function__,"N",N,0); - check_greater_or_equal(function__,"K",K,0); - check_greater_or_equal(function__,"family",family,1); - check_less_or_equal(function__,"family",family,5); - check_greater_or_equal(function__,"is_continuous",is_continuous,0); - check_less_or_equal(function__,"is_continuous",is_continuous,1); - check_greater_or_equal(function__,"has_aux",has_aux,0); - check_less_or_equal(function__,"has_aux",has_aux,1); - check_greater_or_equal(function__,"model_type",model_type,1); - check_less_or_equal(function__,"model_type",model_type,3); - check_greater_or_equal(function__,"has_intercept",has_intercept,0); - check_less_or_equal(function__,"has_intercept",has_intercept,1); - for (int k0__ = 0; k0__ < (logical_eq(family,4) ? N : 0 ); ++k0__) { - check_greater_or_equal(function__,"trials[k0__]",trials[k0__],0); - } - check_greater_or_equal(function__,"order",order,1); - check_less_or_equal(function__,"order",order,2); - for (int k0__ = 0; k0__ < logical_eq(order,2); ++k0__) { - check_greater_or_equal(function__,"Q_n[k0__]",Q_n[k0__],0); - } - check_greater_or_equal(function__,"prior_dist_rho",prior_dist_rho,0); - check_less_or_equal(function__,"prior_dist_rho",prior_dist_rho,1); - check_greater_or_equal(function__,"prior_scale_rho",prior_scale_rho,0); - check_greater_or_equal(function__,"prior_df_rho",prior_df_rho,0); - check_greater_or_equal(function__,"shape1_rho",shape1_rho,0); - check_greater_or_equal(function__,"shape2_rho",shape2_rho,0); - check_greater_or_equal(function__,"prior_dist_for_intercept",prior_dist_for_intercept,0); - check_greater_or_equal(function__,"prior_dist",prior_dist,0); - check_greater_or_equal(function__,"prior_dist_tau",prior_dist_tau,0); - check_greater_or_equal(function__,"prior_scale_for_intercept",prior_scale_for_intercept,0); - check_greater_or_equal(function__,"prior_df_for_intercept",prior_df_for_intercept,0); - check_greater_or_equal(function__,"prior_scale",prior_scale,0); - check_greater_or_equal(function__,"prior_df",prior_df,0); - check_greater_or_equal(function__,"prior_scale_tau",prior_scale_tau,0); - check_greater_or_equal(function__,"prior_df_tau",prior_df_tau,0); - check_greater_or_equal(function__,"global_prior_df",global_prior_df,0); - check_greater_or_equal(function__,"global_prior_scale",global_prior_scale,0); - for (int k0__ = 0; k0__ < (logical_eq(prior_dist,7) ? K : 0 ); ++k0__) { - check_greater_or_equal(function__,"num_normals[k0__]",num_normals[k0__],2); - } - check_greater_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,0); - check_less_or_equal(function__,"prior_dist_for_aux",prior_dist_for_aux,3); - check_greater_or_equal(function__,"prior_mean_for_aux",prior_mean_for_aux,0); - check_greater_or_equal(function__,"prior_scale_for_aux",prior_scale_for_aux,0); - check_greater_or_equal(function__,"prior_df_for_aux",prior_df_for_aux,0); - // initialize data variables - poisson_max = double(0); - stan::math::fill(poisson_max,DUMMY_VAR__); - stan::math::assign(poisson_max,pow(2.0,30.0)); - hs = int(0); - stan::math::fill(hs, std::numeric_limits::min()); - sum_log_y = double(0); - stan::math::fill(sum_log_y,DUMMY_VAR__); - stan::math::assign(sum_log_y,(logical_eq(family,1) ? stan::math::not_a_number() : sum(log(y_real)) )); - - try { - current_statement_begin__ = 724; - if (as_bool(logical_lte(prior_dist,2))) { - current_statement_begin__ = 724; - stan::math::assign(hs, 0); - } else if (as_bool(logical_eq(prior_dist,3))) { - current_statement_begin__ = 725; - stan::math::assign(hs, 2); - } else if (as_bool(logical_eq(prior_dist,4))) { - current_statement_begin__ = 726; - stan::math::assign(hs, 4); - } else { - current_statement_begin__ = 727; - stan::math::assign(hs, 0); - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed data - check_greater_or_equal(function__,"hs",hs,0); - - // validate, set parameter ranges - num_params_r__ = 0U; - param_ranges_i__.clear(); - validate_non_negative_index("gamma", "has_intercept", has_intercept); - num_params_r__ += has_intercept; - validate_non_negative_index("z_beta", "K", K); - num_params_r__ += K; - validate_non_negative_index("theta_raw", "(logical_eq(model_type,1) ? 0 : N )", (logical_eq(model_type,1) ? 0 : N )); - num_params_r__ += (logical_eq(model_type,1) ? 0 : N ); - validate_non_negative_index("phi_raw", "(N - 1)", (N - 1)); - num_params_r__ += (N - 1); - validate_non_negative_index("rho", "logical_neq(model_type,1)", logical_neq(model_type,1)); - num_params_r__ += logical_neq(model_type,1); - ++num_params_r__; - validate_non_negative_index("global", "hs", hs); - num_params_r__ += hs; - validate_non_negative_index("local", "K", K); - validate_non_negative_index("local", "hs", hs); - num_params_r__ += K * hs; - validate_non_negative_index("mix", "K", K); - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - num_params_r__ += K * (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - validate_non_negative_index("aux_unscaled", "has_aux", has_aux); - num_params_r__ += has_aux; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - num_params_r__ += logical_eq(prior_dist,6); - } - - ~model_spatial() { } - - - void transform_inits(const stan::io::var_context& context__, - std::vector& params_i__, - std::vector& params_r__, - std::ostream* pstream__) const { - stan::io::writer writer__(params_r__,params_i__); - size_t pos__; - (void) pos__; // dummy call to supress warning - std::vector vals_r__; - std::vector vals_i__; - - if (!(context__.contains_r("gamma"))) - throw std::runtime_error("variable gamma missing"); - vals_r__ = context__.vals_r("gamma"); - pos__ = 0U; - validate_non_negative_index("gamma", "has_intercept", has_intercept); - context__.validate_dims("initialization", "gamma", "double", context__.to_vec(has_intercept)); - // generate_declaration gamma - std::vector gamma(has_intercept,double(0)); - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - gamma[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_intercept; ++i0__) - try { - writer__.scalar_lub_unconstrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),gamma[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable gamma: ") + e.what()); - } - - if (!(context__.contains_r("z_beta"))) - throw std::runtime_error("variable z_beta missing"); - vals_r__ = context__.vals_r("z_beta"); - pos__ = 0U; - validate_non_negative_index("z_beta", "K", K); - context__.validate_dims("initialization", "z_beta", "vector_d", context__.to_vec(K)); - // generate_declaration z_beta - vector_d z_beta(static_cast(K)); - for (int j1__ = 0U; j1__ < K; ++j1__) - z_beta(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(z_beta); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable z_beta: ") + e.what()); - } - - if (!(context__.contains_r("theta_raw"))) - throw std::runtime_error("variable theta_raw missing"); - vals_r__ = context__.vals_r("theta_raw"); - pos__ = 0U; - validate_non_negative_index("theta_raw", "(logical_eq(model_type,1) ? 0 : N )", (logical_eq(model_type,1) ? 0 : N )); - context__.validate_dims("initialization", "theta_raw", "vector_d", context__.to_vec((logical_eq(model_type,1) ? 0 : N ))); - // generate_declaration theta_raw - vector_d theta_raw(static_cast((logical_eq(model_type,1) ? 0 : N ))); - for (int j1__ = 0U; j1__ < (logical_eq(model_type,1) ? 0 : N ); ++j1__) - theta_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(theta_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable theta_raw: ") + e.what()); - } - - if (!(context__.contains_r("phi_raw"))) - throw std::runtime_error("variable phi_raw missing"); - vals_r__ = context__.vals_r("phi_raw"); - pos__ = 0U; - validate_non_negative_index("phi_raw", "(N - 1)", (N - 1)); - context__.validate_dims("initialization", "phi_raw", "vector_d", context__.to_vec((N - 1))); - // generate_declaration phi_raw - vector_d phi_raw(static_cast((N - 1))); - for (int j1__ = 0U; j1__ < (N - 1); ++j1__) - phi_raw(j1__) = vals_r__[pos__++]; - try { - writer__.vector_unconstrain(phi_raw); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable phi_raw: ") + e.what()); - } - - if (!(context__.contains_r("rho"))) - throw std::runtime_error("variable rho missing"); - vals_r__ = context__.vals_r("rho"); - pos__ = 0U; - validate_non_negative_index("rho", "logical_neq(model_type,1)", logical_neq(model_type,1)); - context__.validate_dims("initialization", "rho", "double", context__.to_vec(logical_neq(model_type,1))); - // generate_declaration rho - std::vector rho(logical_neq(model_type,1),double(0)); - for (int i0__ = 0U; i0__ < logical_neq(model_type,1); ++i0__) - rho[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_neq(model_type,1); ++i0__) - try { - writer__.scalar_lub_unconstrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ),rho[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable rho: ") + e.what()); - } - - if (!(context__.contains_r("tau"))) - throw std::runtime_error("variable tau missing"); - vals_r__ = context__.vals_r("tau"); - pos__ = 0U; - context__.validate_dims("initialization", "tau", "double", context__.to_vec()); - // generate_declaration tau - double tau(0); - tau = vals_r__[pos__++]; - try { - writer__.scalar_lb_unconstrain(0,tau); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable tau: ") + e.what()); - } - - if (!(context__.contains_r("global"))) - throw std::runtime_error("variable global missing"); - vals_r__ = context__.vals_r("global"); - pos__ = 0U; - validate_non_negative_index("global", "hs", hs); - context__.validate_dims("initialization", "global", "double", context__.to_vec(hs)); - // generate_declaration global - std::vector global(hs,double(0)); - for (int i0__ = 0U; i0__ < hs; ++i0__) - global[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,global[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable global: ") + e.what()); - } - - if (!(context__.contains_r("local"))) - throw std::runtime_error("variable local missing"); - vals_r__ = context__.vals_r("local"); - pos__ = 0U; - validate_non_negative_index("local", "hs", hs); - validate_non_negative_index("local", "K", K); - context__.validate_dims("initialization", "local", "vector_d", context__.to_vec(hs,K)); - // generate_declaration local - std::vector local(hs,vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < hs; ++i0__) - local[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < hs; ++i0__) - try { - writer__.vector_lb_unconstrain(0,local[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable local: ") + e.what()); - } - - if (!(context__.contains_r("mix"))) - throw std::runtime_error("variable mix missing"); - vals_r__ = context__.vals_r("mix"); - pos__ = 0U; - validate_non_negative_index("mix", "(primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))", (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - validate_non_negative_index("mix", "K", K); - context__.validate_dims("initialization", "mix", "vector_d", context__.to_vec((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),K)); - // generate_declaration mix - std::vector mix((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))),vector_d(static_cast(K))); - for (int j1__ = 0U; j1__ < K; ++j1__) - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - mix[i0__](j1__) = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++i0__) - try { - writer__.vector_lb_unconstrain(0,mix[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable mix: ") + e.what()); - } - - if (!(context__.contains_r("aux_unscaled"))) - throw std::runtime_error("variable aux_unscaled missing"); - vals_r__ = context__.vals_r("aux_unscaled"); - pos__ = 0U; - validate_non_negative_index("aux_unscaled", "has_aux", has_aux); - context__.validate_dims("initialization", "aux_unscaled", "double", context__.to_vec(has_aux)); - // generate_declaration aux_unscaled - std::vector aux_unscaled(has_aux,double(0)); - for (int i0__ = 0U; i0__ < has_aux; ++i0__) - aux_unscaled[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < has_aux; ++i0__) - try { - writer__.scalar_lb_unconstrain(0,aux_unscaled[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable aux_unscaled: ") + e.what()); - } - - if (!(context__.contains_r("one_over_lambda"))) - throw std::runtime_error("variable one_over_lambda missing"); - vals_r__ = context__.vals_r("one_over_lambda"); - pos__ = 0U; - validate_non_negative_index("one_over_lambda", "logical_eq(prior_dist,6)", logical_eq(prior_dist,6)); - context__.validate_dims("initialization", "one_over_lambda", "double", context__.to_vec(logical_eq(prior_dist,6))); - // generate_declaration one_over_lambda - std::vector one_over_lambda(logical_eq(prior_dist,6),double(0)); - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - one_over_lambda[i0__] = vals_r__[pos__++]; - for (int i0__ = 0U; i0__ < logical_eq(prior_dist,6); ++i0__) - try { - writer__.scalar_lb_unconstrain(0,one_over_lambda[i0__]); - } catch (const std::exception& e) { - throw std::runtime_error(std::string("Error transforming variable one_over_lambda: ") + e.what()); - } - - params_r__ = writer__.data_r(); - params_i__ = writer__.data_i(); - } - - void transform_inits(const stan::io::var_context& context, - Eigen::Matrix& params_r, - std::ostream* pstream__) const { - std::vector params_r_vec; - std::vector params_i_vec; - transform_inits(context, params_i_vec, params_r_vec, pstream__); - params_r.resize(params_r_vec.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r(i) = params_r_vec[i]; - } - - - template - T__ log_prob(vector& params_r__, - vector& params_i__, - std::ostream* pstream__ = 0) const { - - T__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - T__ lp__(0.0); - stan::math::accumulator lp_accum__; - - // model parameters - stan::io::reader in__(params_r__,params_i__); - - vector gamma; - size_t dim_gamma_0__ = has_intercept; - gamma.reserve(dim_gamma_0__); - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - if (jacobian__) - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__),lp__)); - else - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - - Eigen::Matrix z_beta; - (void) z_beta; // dummy to suppress unused var warning - if (jacobian__) - z_beta = in__.vector_constrain(K,lp__); - else - z_beta = in__.vector_constrain(K); - - Eigen::Matrix theta_raw; - (void) theta_raw; // dummy to suppress unused var warning - if (jacobian__) - theta_raw = in__.vector_constrain((logical_eq(model_type,1) ? 0 : N ),lp__); - else - theta_raw = in__.vector_constrain((logical_eq(model_type,1) ? 0 : N )); - - Eigen::Matrix phi_raw; - (void) phi_raw; // dummy to suppress unused var warning - if (jacobian__) - phi_raw = in__.vector_constrain((N - 1),lp__); - else - phi_raw = in__.vector_constrain((N - 1)); - - vector rho; - size_t dim_rho_0__ = logical_neq(model_type,1); - rho.reserve(dim_rho_0__); - for (size_t k_0__ = 0; k_0__ < dim_rho_0__; ++k_0__) { - if (jacobian__) - rho.push_back(in__.scalar_lub_constrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ),lp__)); - else - rho.push_back(in__.scalar_lub_constrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ))); - } - - T__ tau; - (void) tau; // dummy to suppress unused var warning - if (jacobian__) - tau = in__.scalar_lb_constrain(0,lp__); - else - tau = in__.scalar_lb_constrain(0); - - vector global; - size_t dim_global_0__ = hs; - global.reserve(dim_global_0__); - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - if (jacobian__) - global.push_back(in__.scalar_lb_constrain(0,lp__)); - else - global.push_back(in__.scalar_lb_constrain(0)); - } - - vector > local; - size_t dim_local_0__ = hs; - local.reserve(dim_local_0__); - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - if (jacobian__) - local.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - local.push_back(in__.vector_lb_constrain(0,K)); - } - - vector > mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - mix.reserve(dim_mix_0__); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - if (jacobian__) - mix.push_back(in__.vector_lb_constrain(0,K,lp__)); - else - mix.push_back(in__.vector_lb_constrain(0,K)); - } - - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = has_aux; - aux_unscaled.reserve(dim_aux_unscaled_0__); - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - if (jacobian__) - aux_unscaled.push_back(in__.scalar_lb_constrain(0,lp__)); - else - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - one_over_lambda.reserve(dim_one_over_lambda_0__); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - if (jacobian__) - one_over_lambda.push_back(in__.scalar_lb_constrain(0,lp__)); - else - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - - - // transformed parameters - validate_non_negative_index("beta", "K", K); - Eigen::Matrix beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, DUMMY_VAR__); - stan::math::fill(beta,DUMMY_VAR__); - T__ aux; - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, DUMMY_VAR__); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(has_aux,0) ? stan::math::promote_scalar(0) : stan::math::promote_scalar((logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(get_base1(aux_unscaled,1,"aux_unscaled",1)) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1)) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))) )) )) )); - validate_non_negative_index("phi", "N", N); - Eigen::Matrix phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, DUMMY_VAR__); - stan::math::fill(phi,DUMMY_VAR__); - validate_non_negative_index("psi", "N", N); - Eigen::Matrix psi(static_cast(N)); - (void) psi; // dummy to suppress unused var warning - - stan::math::initialize(psi, DUMMY_VAR__); - stan::math::fill(psi,DUMMY_VAR__); - - - try { - current_statement_begin__ = 751; - stan::model::assign(phi, - stan::model::cons_list(stan::model::index_min_max(1, (N - 1)), stan::model::nil_index_list()), - phi_raw, - "assigning variable phi"); - current_statement_begin__ = 752; - stan::math::assign(get_base1_lhs(phi,N,"phi",1), -(sum(phi_raw))); - current_statement_begin__ = 761; - if (as_bool(logical_eq(model_type,1))) { - current_statement_begin__ = 762; - stan::math::assign(psi, multiply(phi,tau)); - } else if (as_bool(logical_eq(model_type,2))) { - current_statement_begin__ = 764; - stan::math::assign(psi, add(multiply(phi,get_base1(rho,1,"rho",1)),multiply(theta_raw,tau))); - } else if (as_bool(logical_eq(model_type,3))) { - current_statement_begin__ = 766; - stan::math::assign(psi, multiply(tau,add(multiply(sqrt((1 - get_base1(rho,1,"rho",1))),theta_raw),multiply(sqrt((get_base1(rho,1,"rho",1) / scaling_factor)),phi)))); - } - current_statement_begin__ = 769; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 769; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 770; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 771; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 772; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 775; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 776; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 777; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 780; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 781; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 782; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 785; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 787; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 790; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 791; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 792; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 793; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 794; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 795; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 797; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - for (int i0__ = 0; i0__ < K; ++i0__) { - if (stan::math::is_uninitialized(beta(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: beta" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - if (stan::math::is_uninitialized(aux)) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: aux"; - throw std::runtime_error(msg__.str()); - } - for (int i0__ = 0; i0__ < N; ++i0__) { - if (stan::math::is_uninitialized(phi(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: phi" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - for (int i0__ = 0; i0__ < N; ++i0__) { - if (stan::math::is_uninitialized(psi(i0__))) { - std::stringstream msg__; - msg__ << "Undefined transformed parameter: psi" << '[' << i0__ << ']'; - throw std::runtime_error(msg__.str()); - } - } - - const char* function__ = "validate transformed params"; - (void) function__; // dummy to suppress unused var warning - - // model body - try { - { - validate_non_negative_index("eta", "N", N); - Eigen::Matrix eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, DUMMY_VAR__); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 804; - if (as_bool(logical_eq(has_intercept,1))) { - current_statement_begin__ = 805; - stan::math::assign(eta, add(add(get_base1(gamma,1,"gamma",1),multiply(X,beta)),psi)); - } else { - current_statement_begin__ = 807; - stan::math::assign(eta, add(multiply(X,beta),psi)); - } - current_statement_begin__ = 809; - if (as_bool(logical_eq(family,1))) { - - current_statement_begin__ = 810; - stan::math::assign(eta, linkinv_gauss(eta,link, pstream__)); - current_statement_begin__ = 811; - lp_accum__.add(normal_log(y_real,eta,aux)); - } else if (as_bool(logical_eq(family,2))) { - - current_statement_begin__ = 814; - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - current_statement_begin__ = 815; - lp_accum__.add(poisson_log(y_int,eta)); - } else if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 818; - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - current_statement_begin__ = 819; - lp_accum__.add(neg_binomial_2_log(y_int,eta,aux)); - } else if (as_bool(logical_eq(family,4))) { - - current_statement_begin__ = 822; - stan::math::assign(eta, linkinv_binom(eta,link, pstream__)); - current_statement_begin__ = 823; - lp_accum__.add(binomial_log(y_int,trials,eta)); - } else if (as_bool(logical_eq(family,5))) { - - current_statement_begin__ = 826; - lp_accum__.add(GammaReg(y_real,eta,aux,link,sum_log_y, pstream__)); - } - current_statement_begin__ = 829; - if (as_bool(logical_eq(order,1))) { - current_statement_begin__ = 830; - lp_accum__.add((-(0.5) * dot_self(subtract(stan::model::rvalue(phi, stan::model::cons_list(stan::model::index_multi(stan::model::rvalue(edges, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(1), stan::model::nil_index_list())), "edges")), stan::model::nil_index_list()), "phi"),stan::model::rvalue(phi, stan::model::cons_list(stan::model::index_multi(stan::model::rvalue(edges, stan::model::cons_list(stan::model::index_omni(), stan::model::cons_list(stan::model::index_uni(2), stan::model::nil_index_list())), "edges")), stan::model::nil_index_list()), "phi"))))); - } else if (as_bool(logical_eq(order,2))) { - current_statement_begin__ = 832; - lp_accum__.add((-(0.5) * dot_product(phi,csr_matrix_times_vector(N,N,w,v,u,phi)))); - } - current_statement_begin__ = 836; - if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 836; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 837; - lp_accum__.add(normal_log(z_beta,0,1)); - } else if (as_bool(logical_eq(prior_dist,3))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 840; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 841; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 842; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 843; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 844; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 848; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 849; - lp_accum__.add((normal_log(get_base1(local,1,"local",1),0,1) - log_half)); - current_statement_begin__ = 850; - lp_accum__.add(inv_gamma_log(get_base1(local,2,"local",1),multiply(0.5,prior_df),multiply(0.5,prior_df))); - current_statement_begin__ = 851; - lp_accum__.add((normal_log(get_base1(local,3,"local",1),0,1) - log_half)); - current_statement_begin__ = 853; - lp_accum__.add(inv_gamma_log(get_base1(local,4,"local",1),multiply(0.5,prior_scale),multiply(0.5,prior_scale))); - current_statement_begin__ = 854; - lp_accum__.add((normal_log(get_base1(global,1,"global",1),0,1) - log_half)); - current_statement_begin__ = 855; - lp_accum__.add(inv_gamma_log(get_base1(global,2,"global",1),(0.5 * global_prior_df),(0.5 * global_prior_df))); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - - current_statement_begin__ = 858; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 859; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - } else if (as_bool(logical_eq(prior_dist,6))) { - - current_statement_begin__ = 862; - lp_accum__.add(normal_log(z_beta,0,1)); - current_statement_begin__ = 863; - lp_accum__.add(exponential_log(get_base1(mix,1,"mix",1),1)); - current_statement_begin__ = 864; - lp_accum__.add(chi_square_log(get_base1(one_over_lambda,1,"one_over_lambda",1),get_base1(prior_df,1,"prior_df",1))); - } else if (as_bool(logical_eq(prior_dist,7))) { - - current_statement_begin__ = 867; - lp_accum__.add(normal_log(z_beta,0,1)); - } - current_statement_begin__ = 872; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 873; - if (as_bool(logical_eq(prior_dist_for_intercept,1))) { - current_statement_begin__ = 874; - lp_accum__.add(normal_log(gamma,prior_mean_for_intercept,prior_scale_for_intercept)); - } else if (as_bool(logical_eq(prior_dist_for_intercept,2))) { - current_statement_begin__ = 876; - lp_accum__.add(student_t_log(gamma,prior_df_for_intercept,prior_mean_for_intercept,prior_scale_for_intercept)); - } - } - current_statement_begin__ = 881; - if (as_bool(logical_eq(model_type,2))) { - - current_statement_begin__ = 882; - lp_accum__.add(normal_log(theta_raw,0,1)); - current_statement_begin__ = 884; - if (as_bool(logical_eq(prior_dist_rho,1))) { - current_statement_begin__ = 885; - lp_accum__.add(normal_log(get_base1(rho,1,"rho",1),prior_mean_rho,prior_scale_rho)); - } else if (as_bool(logical_eq(prior_dist_rho,2))) { - current_statement_begin__ = 887; - lp_accum__.add(student_t_log(get_base1(rho,1,"rho",1),prior_df_rho,prior_mean_rho,prior_scale_rho)); - } else if (as_bool(logical_eq(prior_dist_rho,3))) { - current_statement_begin__ = 889; - lp_accum__.add(exponential_log(get_base1(rho,1,"rho",1),prior_scale_rho)); - } - } else if (as_bool(logical_eq(model_type,3))) { - - current_statement_begin__ = 893; - lp_accum__.add(normal_log(theta_raw,0,1)); - current_statement_begin__ = 894; - if (as_bool(logical_eq(prior_dist_rho,1))) { - current_statement_begin__ = 895; - lp_accum__.add(beta_log(get_base1(rho,1,"rho",1),shape1_rho,shape2_rho)); - } - } - current_statement_begin__ = 899; - if (as_bool(logical_eq(prior_dist_tau,1))) { - current_statement_begin__ = 900; - lp_accum__.add(normal_log(tau,prior_mean_tau,prior_scale_tau)); - } else if (as_bool(logical_eq(prior_dist_tau,2))) { - current_statement_begin__ = 902; - lp_accum__.add(student_t_log(tau,prior_df_tau,prior_mean_tau,prior_scale_tau)); - } else if (as_bool(logical_eq(prior_dist_tau,3))) { - current_statement_begin__ = 904; - lp_accum__.add(exponential_log(tau,prior_scale_tau)); - } - current_statement_begin__ = 907; - if (as_bool(logical_eq(has_aux,1))) { - - current_statement_begin__ = 910; - if (as_bool((primitive_value(logical_gt(prior_dist_for_aux,0)) && primitive_value(logical_gt(prior_scale_for_aux,0))))) { - { - T__ log_half; - (void) log_half; // dummy to suppress unused var warning - - stan::math::initialize(log_half, DUMMY_VAR__); - stan::math::fill(log_half,DUMMY_VAR__); - stan::math::assign(log_half,-(0.6931471805599454)); - - - current_statement_begin__ = 912; - if (as_bool(logical_eq(prior_dist_for_aux,1))) { - current_statement_begin__ = 913; - lp_accum__.add((normal_log(aux_unscaled,0,1) - log_half)); - } else if (as_bool(logical_eq(prior_dist_for_aux,2))) { - current_statement_begin__ = 915; - lp_accum__.add((student_t_log(aux_unscaled,prior_df_for_aux,0,1) - log_half)); - } else { - current_statement_begin__ = 917; - lp_accum__.add(exponential_log(aux_unscaled,1)); - } - } - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - lp_accum__.add(lp__); - return lp_accum__.sum(); - - } // log_prob() - - template - T_ log_prob(Eigen::Matrix& params_r, - std::ostream* pstream = 0) const { - std::vector vec_params_r; - vec_params_r.reserve(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - vec_params_r.push_back(params_r(i)); - std::vector vec_params_i; - return log_prob(vec_params_r, vec_params_i, pstream); - } - - - void get_param_names(std::vector& names__) const { - names__.resize(0); - names__.push_back("gamma"); - names__.push_back("z_beta"); - names__.push_back("theta_raw"); - names__.push_back("phi_raw"); - names__.push_back("rho"); - names__.push_back("tau"); - names__.push_back("global"); - names__.push_back("local"); - names__.push_back("mix"); - names__.push_back("aux_unscaled"); - names__.push_back("one_over_lambda"); - names__.push_back("beta"); - names__.push_back("aux"); - names__.push_back("phi"); - names__.push_back("psi"); - names__.push_back("mean_PPD"); - names__.push_back("alpha"); - } - - - void get_dims(std::vector >& dimss__) const { - dimss__.resize(0); - std::vector dims__; - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((logical_eq(model_type,1) ? 0 : N )); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((N - 1)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_neq(model_type,1)); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(hs); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back((primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6)))); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_aux); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(logical_eq(prior_dist,6)); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(K); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(N); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(N); - dimss__.push_back(dims__); - dims__.resize(0); - dimss__.push_back(dims__); - dims__.resize(0); - dims__.push_back(has_intercept); - dimss__.push_back(dims__); - } - - template - void write_array(RNG& base_rng__, - std::vector& params_r__, - std::vector& params_i__, - std::vector& vars__, - bool include_tparams__ = true, - bool include_gqs__ = true, - std::ostream* pstream__ = 0) const { - vars__.resize(0); - stan::io::reader in__(params_r__,params_i__); - static const char* function__ = "model_spatial_namespace::write_array"; - (void) function__; // dummy to suppress unused var warning - // read-transform, write parameters - vector gamma; - size_t dim_gamma_0__ = has_intercept; - for (size_t k_0__ = 0; k_0__ < dim_gamma_0__; ++k_0__) { - gamma.push_back(in__.scalar_lub_constrain(make_lower(family,link, pstream__),make_upper(family,link, pstream__))); - } - vector_d z_beta = in__.vector_constrain(K); - vector_d theta_raw = in__.vector_constrain((logical_eq(model_type,1) ? 0 : N )); - vector_d phi_raw = in__.vector_constrain((N - 1)); - vector rho; - size_t dim_rho_0__ = logical_neq(model_type,1); - for (size_t k_0__ = 0; k_0__ < dim_rho_0__; ++k_0__) { - rho.push_back(in__.scalar_lub_constrain(0,(logical_eq(model_type,3) ? stan::math::promote_scalar(1) : stan::math::promote_scalar(stan::math::positive_infinity()) ))); - } - double tau = in__.scalar_lb_constrain(0); - vector global; - size_t dim_global_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_global_0__; ++k_0__) { - global.push_back(in__.scalar_lb_constrain(0)); - } - vector local; - size_t dim_local_0__ = hs; - for (size_t k_0__ = 0; k_0__ < dim_local_0__; ++k_0__) { - local.push_back(in__.vector_lb_constrain(0,K)); - } - vector mix; - size_t dim_mix_0__ = (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); - for (size_t k_0__ = 0; k_0__ < dim_mix_0__; ++k_0__) { - mix.push_back(in__.vector_lb_constrain(0,K)); - } - vector aux_unscaled; - size_t dim_aux_unscaled_0__ = has_aux; - for (size_t k_0__ = 0; k_0__ < dim_aux_unscaled_0__; ++k_0__) { - aux_unscaled.push_back(in__.scalar_lb_constrain(0)); - } - vector one_over_lambda; - size_t dim_one_over_lambda_0__ = logical_eq(prior_dist,6); - for (size_t k_0__ = 0; k_0__ < dim_one_over_lambda_0__; ++k_0__) { - one_over_lambda.push_back(in__.scalar_lb_constrain(0)); - } - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(gamma[k_0__]); - } - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(z_beta[k_0__]); - } - for (int k_0__ = 0; k_0__ < (logical_eq(model_type,1) ? 0 : N ); ++k_0__) { - vars__.push_back(theta_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < (N - 1); ++k_0__) { - vars__.push_back(phi_raw[k_0__]); - } - for (int k_0__ = 0; k_0__ < logical_neq(model_type,1); ++k_0__) { - vars__.push_back(rho[k_0__]); - } - vars__.push_back(tau); - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(global[k_0__]); - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < hs; ++k_0__) { - vars__.push_back(local[k_0__][k_1__]); - } - } - for (int k_1__ = 0; k_1__ < K; ++k_1__) { - for (int k_0__ = 0; k_0__ < (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - vars__.push_back(mix[k_0__][k_1__]); - } - } - for (int k_0__ = 0; k_0__ < has_aux; ++k_0__) { - vars__.push_back(aux_unscaled[k_0__]); - } - for (int k_0__ = 0; k_0__ < logical_eq(prior_dist,6); ++k_0__) { - vars__.push_back(one_over_lambda[k_0__]); - } - - if (!include_tparams__) return; - // declare and define transformed parameters - double lp__ = 0.0; - (void) lp__; // dummy to suppress unused var warning - stan::math::accumulator lp_accum__; - - double DUMMY_VAR__(std::numeric_limits::quiet_NaN()); - (void) DUMMY_VAR__; // suppress unused var warning - - validate_non_negative_index("beta", "K", K); - vector_d beta(static_cast(K)); - (void) beta; // dummy to suppress unused var warning - - stan::math::initialize(beta, std::numeric_limits::quiet_NaN()); - stan::math::fill(beta,DUMMY_VAR__); - double aux(0.0); - (void) aux; // dummy to suppress unused var warning - - stan::math::initialize(aux, std::numeric_limits::quiet_NaN()); - stan::math::fill(aux,DUMMY_VAR__); - stan::math::assign(aux,(logical_eq(has_aux,0) ? stan::math::promote_scalar(0) : stan::math::promote_scalar((logical_eq(prior_dist_for_aux,0) ? stan::math::promote_scalar(get_base1(aux_unscaled,1,"aux_unscaled",1)) : stan::math::promote_scalar((logical_lte(prior_dist_for_aux,2) ? stan::math::promote_scalar(((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1)) + prior_mean_for_aux)) : stan::math::promote_scalar((prior_scale_for_aux * get_base1(aux_unscaled,1,"aux_unscaled",1))) )) )) )); - validate_non_negative_index("phi", "N", N); - vector_d phi(static_cast(N)); - (void) phi; // dummy to suppress unused var warning - - stan::math::initialize(phi, std::numeric_limits::quiet_NaN()); - stan::math::fill(phi,DUMMY_VAR__); - validate_non_negative_index("psi", "N", N); - vector_d psi(static_cast(N)); - (void) psi; // dummy to suppress unused var warning - - stan::math::initialize(psi, std::numeric_limits::quiet_NaN()); - stan::math::fill(psi,DUMMY_VAR__); - - - try { - current_statement_begin__ = 751; - stan::model::assign(phi, - stan::model::cons_list(stan::model::index_min_max(1, (N - 1)), stan::model::nil_index_list()), - phi_raw, - "assigning variable phi"); - current_statement_begin__ = 752; - stan::math::assign(get_base1_lhs(phi,N,"phi",1), -(sum(phi_raw))); - current_statement_begin__ = 761; - if (as_bool(logical_eq(model_type,1))) { - current_statement_begin__ = 762; - stan::math::assign(psi, multiply(phi,tau)); - } else if (as_bool(logical_eq(model_type,2))) { - current_statement_begin__ = 764; - stan::math::assign(psi, add(multiply(phi,get_base1(rho,1,"rho",1)),multiply(theta_raw,tau))); - } else if (as_bool(logical_eq(model_type,3))) { - current_statement_begin__ = 766; - stan::math::assign(psi, multiply(tau,add(multiply(sqrt((1 - get_base1(rho,1,"rho",1))),theta_raw),multiply(sqrt((get_base1(rho,1,"rho",1) / scaling_factor)),phi)))); - } - current_statement_begin__ = 769; - if (as_bool(logical_eq(prior_dist,0))) { - current_statement_begin__ = 769; - stan::math::assign(beta, z_beta); - } else if (as_bool(logical_eq(prior_dist,1))) { - current_statement_begin__ = 770; - stan::math::assign(beta, add(elt_multiply(z_beta,prior_scale),prior_mean)); - } else if (as_bool(logical_eq(prior_dist,2))) { - current_statement_begin__ = 771; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 772; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((CFt(get_base1(z_beta,k,"z_beta",1),get_base1(prior_df,k,"prior_df",1), pstream__) * get_base1(prior_scale,k,"prior_scale",1)) + get_base1(prior_mean,k,"prior_mean",1))); - } - } else if (as_bool(logical_eq(prior_dist,3))) { - - current_statement_begin__ = 775; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 776; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 777; - stan::math::assign(beta, hs_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,4))) { - - current_statement_begin__ = 780; - if (as_bool((primitive_value(logical_eq(is_continuous,1)) && primitive_value(logical_eq(family,1))))) { - current_statement_begin__ = 781; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,aux, pstream__)); - } else { - current_statement_begin__ = 782; - stan::math::assign(beta, hsplus_prior(z_beta,global,local,global_prior_scale,1, pstream__)); - } - } else if (as_bool(logical_eq(prior_dist,5))) { - current_statement_begin__ = 785; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(prior_scale,sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,6))) { - current_statement_begin__ = 787; - stan::math::assign(beta, add(prior_mean,elt_multiply(elt_multiply(multiply(get_base1(one_over_lambda,1,"one_over_lambda",1),prior_scale),sqrt(multiply(2,get_base1(mix,1,"mix",1)))),z_beta))); - } else if (as_bool(logical_eq(prior_dist,7))) { - { - int z_pos(0); - (void) z_pos; // dummy to suppress unused var warning - - stan::math::fill(z_pos, std::numeric_limits::min()); - stan::math::assign(z_pos,1); - - - current_statement_begin__ = 790; - for (int k = 1; k <= K; ++k) { - - current_statement_begin__ = 791; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), get_base1(z_beta,z_pos,"z_beta",1)); - current_statement_begin__ = 792; - stan::math::assign(z_pos, (z_pos + 1)); - current_statement_begin__ = 793; - for (int n = 2; n <= get_base1(num_normals,k,"num_normals",1); ++n) { - - current_statement_begin__ = 794; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), (get_base1(beta,k,"beta",1) * get_base1(z_beta,z_pos,"z_beta",1))); - current_statement_begin__ = 795; - stan::math::assign(z_pos, (z_pos + 1)); - } - current_statement_begin__ = 797; - stan::math::assign(get_base1_lhs(beta,k,"beta",1), ((get_base1(beta,k,"beta",1) * pow(get_base1(prior_scale,k,"prior_scale",1),get_base1(num_normals,k,"num_normals",1))) + get_base1(prior_mean,k,"prior_mean",1))); - } - } - } - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate transformed parameters - - // write transformed parameters - for (int k_0__ = 0; k_0__ < K; ++k_0__) { - vars__.push_back(beta[k_0__]); - } - vars__.push_back(aux); - for (int k_0__ = 0; k_0__ < N; ++k_0__) { - vars__.push_back(phi[k_0__]); - } - for (int k_0__ = 0; k_0__ < N; ++k_0__) { - vars__.push_back(psi[k_0__]); - } - - if (!include_gqs__) return; - // declare and define generated quantities - double mean_PPD(0.0); - (void) mean_PPD; // dummy to suppress unused var warning - - stan::math::initialize(mean_PPD, std::numeric_limits::quiet_NaN()); - stan::math::fill(mean_PPD,DUMMY_VAR__); - stan::math::assign(mean_PPD,0); - validate_non_negative_index("alpha", "has_intercept", has_intercept); - vector alpha(has_intercept, 0.0); - stan::math::initialize(alpha, std::numeric_limits::quiet_NaN()); - stan::math::fill(alpha,DUMMY_VAR__); - - - try { - current_statement_begin__ = 924; - if (as_bool(has_intercept)) { - current_statement_begin__ = 925; - stan::math::assign(get_base1_lhs(alpha,1,"alpha",1), (get_base1(gamma,1,"gamma",1) - dot_product(beta,xbar))); - } - { - validate_non_negative_index("eta", "N", N); - vector_d eta(static_cast(N)); - (void) eta; // dummy to suppress unused var warning - - stan::math::initialize(eta, std::numeric_limits::quiet_NaN()); - stan::math::fill(eta,DUMMY_VAR__); - - - current_statement_begin__ = 928; - if (as_bool(logical_eq(has_intercept,1))) { - - current_statement_begin__ = 929; - stan::math::assign(eta, add(add(get_base1(alpha,1,"alpha",1),multiply(X,beta)),psi)); - } else { - - current_statement_begin__ = 932; - stan::math::assign(eta, add(multiply(X,beta),psi)); - } - current_statement_begin__ = 934; - if (as_bool(logical_eq(family,1))) { - - current_statement_begin__ = 935; - stan::math::assign(eta, linkinv_gauss(eta,link, pstream__)); - current_statement_begin__ = 936; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 936; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta,n,"eta",1),aux, base_rng__))); - } - } else if (as_bool(logical_eq(family,2))) { - - current_statement_begin__ = 939; - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - current_statement_begin__ = 940; - for (int n = 1; n <= N; ++n) { - - current_statement_begin__ = 941; - if (as_bool(logical_lt(get_base1(eta,n,"eta",1),poisson_max))) { - current_statement_begin__ = 942; - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(get_base1(eta,n,"eta",1), base_rng__))); - } else { - current_statement_begin__ = 944; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(get_base1(eta,n,"eta",1),sqrt(get_base1(eta,n,"eta",1)), base_rng__))); - } - } - } else if (as_bool(logical_eq(family,3))) { - - current_statement_begin__ = 948; - stan::math::assign(eta, linkinv_count(eta,link, pstream__)); - current_statement_begin__ = 949; - for (int n = 1; n <= N; ++n) { - { - double gamma_temp(0.0); - (void) gamma_temp; // dummy to suppress unused var warning - - stan::math::initialize(gamma_temp, std::numeric_limits::quiet_NaN()); - stan::math::fill(gamma_temp,DUMMY_VAR__); - - - current_statement_begin__ = 951; - if (as_bool(is_inf(aux))) { - current_statement_begin__ = 951; - stan::math::assign(gamma_temp, get_base1(eta,n,"eta",1)); - } else { - current_statement_begin__ = 952; - stan::math::assign(gamma_temp, gamma_rng(aux,(aux / get_base1(eta,n,"eta",1)), base_rng__)); - } - current_statement_begin__ = 953; - if (as_bool(logical_lt(gamma_temp,poisson_max))) { - current_statement_begin__ = 954; - stan::math::assign(mean_PPD, (mean_PPD + poisson_rng(gamma_temp, base_rng__))); - } else { - current_statement_begin__ = 955; - stan::math::assign(mean_PPD, (mean_PPD + normal_rng(gamma_temp,sqrt(gamma_temp), base_rng__))); - } - } - } - } else if (as_bool(logical_eq(family,4))) { - - current_statement_begin__ = 959; - stan::math::assign(eta, linkinv_binom(eta,link, pstream__)); - current_statement_begin__ = 960; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 960; - stan::math::assign(mean_PPD, (mean_PPD + binomial_rng(get_base1(trials,n,"trials",1),inv_logit(get_base1(eta,n,"eta",1)), base_rng__))); - } - } else if (as_bool(logical_eq(family,5))) { - - current_statement_begin__ = 963; - if (as_bool(logical_gt(link,1))) { - current_statement_begin__ = 963; - stan::math::assign(eta, linkinv_gamma(eta,link, pstream__)); - } - current_statement_begin__ = 964; - for (int n = 1; n <= N; ++n) { - current_statement_begin__ = 964; - stan::math::assign(mean_PPD, (mean_PPD + gamma_rng(aux,(aux / get_base1(eta,n,"eta",1)), base_rng__))); - } - } - } - current_statement_begin__ = 967; - stan::math::assign(mean_PPD, (mean_PPD / N)); - } catch (const std::exception& e) { - stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__()); - // Next line prevents compiler griping about no return - throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***"); - } - - // validate generated quantities - - // write generated quantities - vars__.push_back(mean_PPD); - for (int k_0__ = 0; k_0__ < has_intercept; ++k_0__) { - vars__.push_back(alpha[k_0__]); - } - - } - - template - void write_array(RNG& base_rng, - Eigen::Matrix& params_r, - Eigen::Matrix& vars, - bool include_tparams = true, - bool include_gqs = true, - std::ostream* pstream = 0) const { - std::vector params_r_vec(params_r.size()); - for (int i = 0; i < params_r.size(); ++i) - params_r_vec[i] = params_r(i); - std::vector vars_vec; - std::vector params_i_vec; - write_array(base_rng,params_r_vec,params_i_vec,vars_vec,include_tparams,include_gqs,pstream); - vars.resize(vars_vec.size()); - for (int i = 0; i < vars.size(); ++i) - vars(i) = vars_vec[i]; - } - - static std::string model_name() { - return "model_spatial"; - } - - - void constrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(model_type,1) ? 0 : N ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (N - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_neq(model_type,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "tau"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= has_aux; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "psi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - - - void unconstrained_param_names(std::vector& param_names__, - bool include_tparams__ = true, - bool include_gqs__ = true) const { - std::stringstream param_name_stream__; - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "gamma" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "z_beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (logical_eq(model_type,1) ? 0 : N ); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "theta_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= (N - 1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi_raw" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_neq(model_type,1); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "rho" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "tau"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "global" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= hs; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "local" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_1__ = 1; k_1__ <= K; ++k_1__) { - for (int k_0__ = 1; k_0__ <= (primitive_value(logical_eq(prior_dist,5)) || primitive_value(logical_eq(prior_dist,6))); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "mix" << '.' << k_0__ << '.' << k_1__; - param_names__.push_back(param_name_stream__.str()); - } - } - for (int k_0__ = 1; k_0__ <= has_aux; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "aux_unscaled" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= logical_eq(prior_dist,6); ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "one_over_lambda" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__ && !include_tparams__) return; - for (int k_0__ = 1; k_0__ <= K; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "beta" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - param_name_stream__.str(std::string()); - param_name_stream__ << "aux"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "phi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - for (int k_0__ = 1; k_0__ <= N; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "psi" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - - if (!include_gqs__) return; - param_name_stream__.str(std::string()); - param_name_stream__ << "mean_PPD"; - param_names__.push_back(param_name_stream__.str()); - for (int k_0__ = 1; k_0__ <= has_intercept; ++k_0__) { - param_name_stream__.str(std::string()); - param_name_stream__ << "alpha" << '.' << k_0__; - param_names__.push_back(param_name_stream__.str()); - } - } - -}; // model - -} - - - - -#endif From 6efcfe41b648a2e7a90b5e2f110798ade8b6bebd Mon Sep 17 00:00:00 2001 From: Ben Goodrich Date: Sun, 28 Oct 2018 14:10:47 -0400 Subject: [PATCH 55/59] rm src/Modules* --- src/Modules.cpp | 203 ------------------------------------------------ src/Modules.o | Bin 87697660 -> 0 bytes 2 files changed, 203 deletions(-) delete mode 100644 src/Modules.cpp delete mode 100644 src/Modules.o diff --git a/src/Modules.cpp b/src/Modules.cpp deleted file mode 100644 index cbc7d3b48..000000000 --- a/src/Modules.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4bernoulli_mod) { - - - class_ >("model_bernoulli") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4binomial_mod) { - - - class_ >("model_binomial") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4continuous_mod) { - - - class_ >("model_continuous") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4count_mod) { - - - class_ >("model_count") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4lm_mod) { - - - class_ >("model_lm") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4polr_mod) { - - - class_ >("model_polr") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} -#include -using namespace Rcpp ; -#include "include/models.hpp" - -RCPP_MODULE(stan_fit4spatial_mod) { - - - class_ >("model_spatial") - - .constructor() - - - .method("call_sampler", &rstan::stan_fit ::call_sampler) - .method("param_names", &rstan::stan_fit ::param_names) - .method("param_names_oi", &rstan::stan_fit ::param_names_oi) - .method("param_fnames_oi", &rstan::stan_fit ::param_fnames_oi) - .method("param_dims", &rstan::stan_fit ::param_dims) - .method("param_dims_oi", &rstan::stan_fit ::param_dims_oi) - .method("update_param_oi", &rstan::stan_fit ::update_param_oi) - .method("param_oi_tidx", &rstan::stan_fit ::param_oi_tidx) - .method("grad_log_prob", &rstan::stan_fit ::grad_log_prob) - .method("log_prob", &rstan::stan_fit ::log_prob) - .method("unconstrain_pars", &rstan::stan_fit ::unconstrain_pars) - .method("constrain_pars", &rstan::stan_fit ::constrain_pars) - .method("num_pars_unconstrained", &rstan::stan_fit ::num_pars_unconstrained) - .method("unconstrained_param_names", &rstan::stan_fit ::unconstrained_param_names) - .method("constrained_param_names", &rstan::stan_fit ::constrained_param_names) - ; -} diff --git a/src/Modules.o b/src/Modules.o deleted file mode 100644 index 2d9ff9f9ccc32e699b65793f20d8ae4dfb98c33e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87697660 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%0D;hK?U;X{8wOq1 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ðW%thn3*!MG?lpE|t4LQ)9y5)LW{|QdF+|okBbSzS6 zOX}_|GV`;ZXs3M=sdTN|I0>pXn#IMjCi;<7-P1@CBFXspFsQtU!)2K4xD0G9sn-!M zxK?8E?86KFSrKU8fFO$I{6U_=3#|&!FxwTNVRkA&!|YLjhUr$ISHmP$?)WUQP7{Oa zbp^oGq5zoM6#&z_3V><10=+Orr^i{~?(6!nz)6}C{t_)8<)rqG1*}5!p?Uvm5DZnI z7XqcQ9I_GDdNJ6EvvRH`2Gg|) zfayyLfT>6UFa;C<(;W)*!j#C$^RNByXXP}?&{1xA=pkJ*3=+`R% z`i%;JezO9g-=+ZQcL;D4da*VeQPavnPw`oi&Ss@MOqK57O?cw-S>5LhSKQp`j{chHl_^I=Nsd#&KPt7A49W5a{HS(&r}Qz zaj!I;D3oPCd>Q6Qtf$n@zK*Z5%O^PjQ+R2$MeSUw`;sF^tP1_Zvmx8ql`|V=jKF*U8cMH1-mx!r6B@(}=H!AoWdR z3ORj=EL;4#t+C_F(yBR^5nU!eoK{v>PYFU7An0W`=%*5do<-2JZqNb=l6f?9E)AMhUX3oy>mu{|KsBfH^ZH%$dQWwl zzCLPRi>tXSfv=_JwV;|SKY0CydA+*&41JwqUN5Om*VjADYi9LeeYMSNYW11CatLPX z^%BrA>z);yU`J+$uhQ4z6&LF3#pY|liX44C*Suc6Vzj>2naG!{7@L?jbH!Kmb&vU) zy5bwW+R2{L&3a*|XOgsDNGa)QsO(O)o=k#L?r8yq)(ayi+Tp=@67Wo_086 zvmAi8giNKSe=S3tkqr2Y-fSc{H|j};mnDEDrlrfPqnu&rF(-#H$f1VwIfOfcLAI{C zXFn*ce{HrNzn1nCZtJ*74)|8K6C1?^trn{|Sb~>P!~~&slnt>0-?_)(dr& z-CSfe6D4Q`f3o6@8bCFFO;>w`jwWXpqqJ^`R@MxVgY%m^trylh!S$QV*2`^Hrpq_K z(zZKKj$4$oj@<kum?Fx8VT|wyZIO!Q^P@Qj3+S8c5=bA=TT&raY8cIEL&2G$kNb? zaLPkV!xY;j2!Y07_g;$_R$w^TA!pM|#~1meD=&K4z_m)T`P@ze$!{cA_xR5kF5w}{ z-UvTXFrCAmFUO3xbY$`nVuRECKnHT>yhJIJS625ZO%ShZ*)a{G7FaL5YK9c8yhudv zkm=YN>RVdm5bNgD|Ga`~%6WX#tD9B7tF~Tf;?PXca&BhZE6r;;Rep7zITb#3?M~Ut zNK;)T6lO-Ai}+T50fSfi(s*)K?n-PbrNt7d>+ShcR})tG@v@~uG zHZ*s_7#vm7(q0)E08iCfFEr#yIbghp-t@{K{4o93&4b%7SDdCva(3US-D`Sv$67tp zU6$d*m*JY6f0BjF$xYs9MUbsQ=PZ9}O45p(5Vf&SVx}!O`zXDzX$zZZm@#zC`E;^h z@;9BoYTiYE^!5+nW?kUC>es_pIovZ4zIQ1mYTH?(rHfrvUtbh~c1S0Y+?2}p*>Znn zWrQ`!qH5cjjNf~CQ=wDV95ZlJBsaF2*NGM4cy?~Q>wDd~n{~K+sln+E&Ys~fcK&Du zm}T(gba^=<_BmZHdfP=JMp>(BF1@GstizgjpN46j3#C{&4GJ$&c)h}^E95jO9MSMi3O6a- ztZ=)+tqON3+^(>mvY7L>!amB+d`ICdg?A~Ot8kaX`3iriaIwPO3Qtw|u);GGPJ-Jg zzrraBFH|^9;Ux;EE4)l$pTZG^GZk)9c!~65e$D>7}=$A~g^GspK*J?Y09hBSeSO z4RA%tY)4D|5 zyv?jm&as>x;rh2%Da93Oh{!q-Z(JTBt|`s6Tt%71;jyAL(ck6Hihq{nXz9n%=}Vgj zAGoY;4LW&B-klWA;BI6AVIeRkf28aNTB7@^WFrp zth8q;013|5qEu+nFH+c$;1Y$GX!vCc8xmZua74qeQrM8-3ktVu__Ycf5?rsaA;FCb z8xq{Ca9}Zuv^Zcc-6C>^J5z&BIWDA7!$laKK3!GCBz2ZU{uGh+1gfRCi zLN3C6Pe*?GlB*B2MyEG1zHxBXL0P-4^VyFb%B2a)UIZ&lD)%}ROewfWmUMfqhb4?3 zOmTaiNW@6A)Vp#a5W1AwC;2N^`2x9gGtwl=}^TlVU&X*?l5XFunhrWWz zA2L`zW7f_aW-uB?k{)V;dhRc-?3K9g&|#K$fHCr{_FORmXrIXoizKC z{pX+TKlcPxUw;1Ixc~hBviwr{g2($IPloCw>1HFFdxs%0A7RvFlX^3dOf26s@HQ0pnAQiKyfsuR)MLBQ;0-t6B9qMg5-BUa-V@DMA7>f%>Zmm z6#(0_3V`i-1@f_p%qhmeJEvbP{d-+hN*1HGq<*l{t<&Qk7RSS~&|ty-raf|B~VU#!*uC=RO$CxnB}exl+x5%6&%xDrfLhIfEZk8vMl`{;5*keo>Yr zmZg_l@lZah04SeO0F+?`iWBonY_$H?x1%{nAKSOLL-L4=VtY z#}qJ))*piYYjKB*;BL(Y1b?dl2(*54Krq7~h~_+`z$w(?Hc3b=?$iuGGFbtTX#E7q zw>0GVwdmi0>;^^9U+w!(cg`uL!*>2@CKRJi9^dkjLWq-1*OL0tkW<4q;V68vZnFt1 zV~1Yq(w>uiqQ&c_{kra!we^sDx5xl4`GkP|R-$!xbil?dnI1bz)h^)24(NLXIjH&UXZFN)#&5;bh+GtuSB)8T^y;WPh*Q zH#_eD8}^d#6DX6yQ_b|tQk@4%xQg9{eR%2jh%EOY(wqMt_+b??lm5|^||ll>LVqYae~#7l1w$Vo6$K< zYA4QdLY0%Kq_{RnF7i0xy2^aYtzX~->v#Nyk`^k~D<>ZmCnT?(h1|z%8u2^w8dxIn zcC0o@+`n_u`pLDqMr_|GPZ@k}Q2?NHFN>SWpzOr|}-WZLso>vV>T>1+?vXFN<7D*&e93V`V<1&&{*{&kRKNqy2f0ru#t zP9T2Jq=@Nf;iufj;BEC-_g->+_9D;NaR=hvHFWSoHmehlm(N@IOrzQ16_w9(Q zt-Q^<=ol{@Pg{|FfT9lA=y1qvKrdi6iw zKU-3RN$V%A^I6RfOxX&6DOUk7U8_Jb{=*7P#eZ0VQy5Q&NM(+og+xdNcQS^>}+ zegUoF7tk7hIsSOsKOcVDMR~D@a=3@`Di7rs6#(T83Y-ETW=cZprS%hX8h)W(hF_?c z;g{p{VgI!l=pr~nO9+Cq6aazNPxvrPL#V}N3Y1hRK5uLkasNQv*`}|G+bHIPp0OTx zF?EXiq1q^7V?9g69kWas(Kaa91ym*}dU^8!a`3M7ZIy!e%9M3!=0Ae^0H1mn7AIe- zW0aQ5N!81uapbfFm7rsnP!6NU$zpEJK6%XZ5;1p{oeJ7}PXX=VM6{m9A`AO^x)(kq zqJv;{QBB3Q{OjqQpP%ENg5h{)f%IO#mwnj%>M#9|{58XkFkCB75$R0|AaUPR0Abjs z0223)3KU0kb}4WQBY&MFWB^&G8G!9|1;Ey#0NC0U0Nc9?9Dn5Re^bl~New2gpVX^C zvjfv>3V`Vi1;DgLf#PV++X_sL=5#7BBbu{UfTMP$B#QI?HpQ@iQ_@m|S2Z(=@COAb zLaPE4VY>npVW$EVVUGe7p<96&Ohu22zW>>1y<`A-Q(w@V`hwon7xbpSpf~kB)!FDu z7t?AjGMLsY0H%!!fN8S=VA`g@@msb3I{j8sQ>Pa-7ckW-04Bq~U^4s*Cd0p{TBl#R znEu1VRPABCuh#j#Em znpFXIX0QcEoUl3$o#Ht6+~-byoO`YZuk+ZN!6}V%H=F|68xqm#IM>*AKy?llFcL;N zj(Gdgw`F9z=C}Ho&>lbRD(3%|V9%a=g7$2&OS_hK?Df1oTLIBe&T=niYZ7Dp{*5H= zd>9+PW+R!KTs<7c#uA=y9=YZrCU0W;^dUMygtDNcz)`y#|MV;;-^FI#ED4 zH*MiZ-j*Tsv}QI>M&+zc-4(T^MNfL|gbwVd9cFxbMTzv5!r<>cWCMN-VB&ULZ8T(Z z(v<&9O7^q~26H^rHR#Ch+wAK|nc$BoPPi?r;^#w&zrB>VUC$2ebx_o3{BoNGFH3D4 z4RwL~Q_<;S=R@(;oL%4EnW``)_MEV!+H&ULRP~|2zZVZ*81lAn8C9$EJd^bf`YpO} z_=aoD2M(8vpF`;R`{7=}Ay<9QJF=>3sdnPb<*2*qeV3RaZHPQYQMpI~hP2Nqz(A9u z00YfP1&Xo%C@>ZKj{-BW{|MkZ`34nUs7-ad!b=pMps*~OMsp@A98q|(!c7YQjl%7~ ziKR|dc=~q-xJJ@4I^Q5qsY;;&RAsCJROQPG9Dicnzp^?^QiI?M%>@KsPyhtiDFA{3 z1@c*+QJ|Rh83p=PR{LKSQTl`JO3eUlT0b#Ujn)vb-K+rE#wY+brT3hptvJ#zIQU7n zQRkCO}v3I(!Egx=?0 z#m+%+*SkvEkYK^Av!KLJCZc=KQ?^Gw_cR z!0q2pDZCI`;V-4|5`}-Ru+WyYq1+qB* zQ~|2;GX;*{zxy}WmP%?6%+*{#P^kb2zN-KTexN`;=btK2%=xDZOvOJFN{pO1 zR`-8b{olE{JZ5r<=FC@sqJCciiuxl3^83sCro<1F@ak9zFOYeQ3Q*n*1t{+j1x}&7@4MyQ?;$y&z;VlKRecYZOOzXkhDSUO$XV}Zxyj2i zYO;*xyrlr;?ofbocPUUD%`y0=Msp1Q8PS|nsgf%iPFGmERy1d@!b|#;z{Rfq3KS*o zqfXHth!t&{po63azt6*;<>9Aj20ukp{Ia1kU1>|v&Q^e;eMXB=K@mh!^%bHqNwrHQ z)$Q*kN~+h6C#hO$#mB{n6y_0vASP1ibcnCG#7dARu6)WD`I4I$Crd)4s~&S+ka!ld zD;DYhQ#HCPvJ%9i8Ybi4y zq!uI*`2_(HOG-eIT+qckJ@|yg*GqBnWjvh86&c3i7wS}VOc}Ov%F!~++}Er7P4)cX z%3VX837h=RevS(ch8{`_h930!>kEhZpjDCpX$D9cCeL8izS0YVRqvG!vGsUh&boPY z#Owb39|iKdtOZZOT(R(r0#2vjdbZ83ik6PB^XjZ8<=}t2X8S}~FovYPDM z2=zNf31#y;lZIsl!==N9lXIHQ(IJm~HsDNeuzS||>u+(ZEa&JXk^St8b_motL}K*$ z{33|Ke1(hoeT^vuN~L0@Iew=Q6d=njSW`G`G-Z32lY~PPTvzkTRYPPy=VY@d*kD=T zi5FCzKlCMiwL`LX*X(2Rhg@@?M?j6yQRf}`+cAXZFky>gVebHGe&tD>E6m4H~%tAGXUdRc~T1bBg%;SdGA&8M& zG;d$&SuYEv^@L_`H*rDzt)mD_>gb`R{Pjg?^1@RdB%8dLJD2ufY&( zI=MO+x(mj?l}*)aVA;KP_?Be5vU{NQxZL3BclP*eI&SnQ?+I|ccICTArWIJj2Trrb zr~d3bjt{Tw8E7ro3C5ta%XYf#n(iCznjK%Vle=V-YvuOC5`CPp| zq`JancSy|hi0R%}FA0WjOh_<%(ndiq>DS4}NgEThByzu`bId9Bk`n9cEYxAg?F*Df7s z&5Q7bgG_!{=tK&vXKVRb**?(T&-D?*&-q))a^ck>lk$^-Dk3PSAcBmQvV zp&^3hC+AR$1pE13%U8UEpOP+cHGyjb&t{&RN=;G@^lZJ zIo{5G6(s8v$+aMH+xO4PUwZ2_PFA00UD+_rwjOD)r8@lUy3w`}HP)C0P7GKQtfJGr zX?^cn`2Pdzk)kER&^X^->#PQUn2X7sqGd%R-nN}1MI&CHwvc|B7RcKWa5mc3Z7m3Z z@+?-7Z0p(A?Bo`^r%ni;xo)pDr3ok_bDiz%5h)Q~4^}@Tjvc;(mO$h*1+3s2e|EFK zvO8tg>EzK-PLzcKhgE`Yhl9>)f8`$!mwqGY9Fk4=$t`2Tqc1@|E<^BllYwmo->|bc z+m&w}ra9vN8L+VL&Mx`AaGEuR#+cH=ONItzTaH#M+Blb3Q}1lQ&kIvtAXcXIL?g9gHtprF&Op&UanN@T1*#L)vz ztzEP8MmxFI?`)tWL&PIUzya2R6m>Ayi zP1+!Z0h&l1G9)O2pn?}wa-)yj9&p|WWVekC4;^cVCsDG6B)X%CpS#-=5=uyhg!u00 z;^+LtPXuI~Pd)Mx3EgFpK;E0BS%KtQJDXLo^bHH)zti_p-@R4_jZu>ZgOzm_thse` za?$*UZU{Kttf|?3)ry4v5Ie6*^goW6K>7OFYhss7Muo!5JMOR%cPn)gE?a^6jG;&TFxA|fMN=>rI#}a2CUl$RMtcQ4 zPK#z=yul7K&#|Le7{xL;t!8IB9hwP z&|y2_VhIgDD)Et*-0Sf!AImE$w7vT22k!Mo3#l(e_d z@?A3>QVDRw{QyPQU2Ea9)cb%XTF#qpv+*^^mEZz1y2&W+M$&`3C-JDKG*Lw2M~|h z-Tv^v-f7gwsgzm{w)ZcNv}w6 zHc_mH2csWcI&tu%q>kTHTBO?^smNY{O#-}5W%kZKjq&G=P9K3sfDZDM2ygOtn7n$X z(R>lfu#57YOUUbtyd`KHx4+KIUTM%Z2tSE&pzMl=KQF*q>&Fr6`3URmhtpvMt0cXi z>^7181`#t{HGl zi#vt~9OVc*lmeF)HS8_2e1#tgC3eAplUCEY&>r68CL6i()()q9lm;p281>velP@fS zjI*At;cb)~LAtvep+tjjO*XH}QvPtts(_=+76=d9$kd<-&BX?dQ{Rz;WJBuj=Wo4T zxl%ey(u-u5RF+4ze97`7lx{;ri`KfE=T0N8OE&T`BZHTkY1X72@-qBI8T!aadL%4e zwix!G18mJ(C?7&a6?S%WAUt|&FnmR;&c6gfk*N8;yO8|-?(g{eHM53pz}lym(2@sh+yFQ@`^x6#f>$uM~*?Hkil?zO)#7i=|~|!xdUJ+`yA?8=9QFW#mkSGHR}uCtzxA|=;+O1Q{3x-AeYYU=2w?wjyd_w@~0F9F8?6CyBqr3^Q9{yY_T#ll7 z`&u}vwnkcRI9xel1HfJDB{3?;osANF2qry1l6U3P+ntl(yD4kr1EXp}K7y1?J$|<) zY?Juw>7tb9PH_4zz4JR#&ner;Vd5(3467uY?gV;~fiJLH#po)DRYS7OTC#p0TssLV zSq-pBq7|-YN-%sYugn)pm@iCxjb6dLNS+f{0W-0fxJzXQ%qF>7!&i}VVgx|qQ2mky z0{E6D$m$7e1(;OFPew|uo!2mT2n8stMP%yN56Nu}x&$E@amq*PM=6Gol*zy$nI^nu zzf5b$zY2TAeufr4NHNKtglV?(h8-?W)>%VQlQmCfX0+1{BOacVRCe~m^pGnry++_c z52tqgL_R{sKibYlI_XyFs4~9OS(*ajlr~haKsde5db|>Jc4c`*k~MFRfR1(~IzNYF zMo3jl*AfXqZyJEcTsI~>5|v>qp&|pugeQHTX+fLyZh<-yV)Z2N@ z){{q=fscr2S1{cmq1$#2S~wyi?}g5x?7Dq*$z`c1<()T6YbDE%Q0h%60i$WdwE#o8 zl16C+(bJ^Wn&oAPA7#y78G%~Z1=ca=DOzaF6H~Uxv+QQCf1FCzlBOU{e(mEH$e)&2 zq7sTzgGoOK&UgQkZNWn^4J849eJFL9=6;!-Ekg3Ys{_w46Cq+$A zHxkHZx^aZut|FH}Xu^_U_CX4GiFuQ1%6>FRZhjNTYrc3U_T zi&fdepi>jfZV5PRZLC;njL$rvC%V|?y33$i^y zj-nzmfurxhLzHKHTdo)jtY?FZ?c@#iz{v}lg0nbsU@5iQg(L7SfaGP1<4~?v~oslqiW-aC~ ztR`hU{8*cU&Yqcn2M5{N9RC}nI_aECH-V}K8ezKewaf^lO|UW~H^uWS-eHHny~B29 z@OL|KaTo8HBWLh;J8&@_>f7DC^LIP2&z8&Va&0Grnu%t>U)|xd=b>taz2Qi}*$i_E zuLQzF5f=yOr)qF_!bU+$pJ|708er#9{2FXHYyCZI{n^;uHWoUK8+P{8Vx!~G7r*mH zX(8%1<%Qb^PF_X=Yg|oFLw3`K9X%0a79`R%6yub=({92H@Bwf}y1>~fA7H7$QV=QI zN(oM5HX*pJ$Df3PF(SZwcDOJ(mq`Y+!Y&~Gp{VPHdz#2D(8X^?K;Y~`feCNdaDEBr zmvDXw@6vF73FnvaE=u7`*`wtWI3r!)?36Cbl@`ovoBLyWB#0MV;cwELP+PwU2T)e5 z4L{cY^s4kHYu%Wm9UYoAfdIeS=@lxG$1+Pqqh^Hz5+bso=qG zztEa%e#gX>V^sIT0nC@uzfJ5$q3siT^r=%;p@U+TX)F5}eb9DwRD0keQGeq-G6nO7 zFM!2^{+RhXKa*aUUYWT;jULh^Q)I%G5qLeJXZ~1QWWSxwNDQlnsx;3q^>S*c09HY% zQ-xjAo&u4YdBrr)XeZZ=h^Rgcm21FS;{#_MDC>M+tN|k-87XyOtD_LU!kR28Tum;& zcB%K{v0y?B{{JFCovmHAzA$@h<-7FRty;b@q0E-Cp^=-%I3rueI+>gOJ#`qZxdwz4gPAko zMKTFu`K0m)!p0$E!s9m&VU}Fymp+=0&C~QxzuP}~r%!&ni+AmxylemDUHhkB`=>wF zKN+v3kJ3NA@p^SZ#j1fau|QUKL z`PLwN|7P@v*!e`(@RURJYs_f%$eY@-_t8wwoH;cnuf6Zq@WMkrBty4Ppe%v11j-dC zSD<`>@&zgus92z>0!cYE!cx9B`0G3U(P&bWKzp|i$>OWTnRqtCYU_FGRh5iJ(`SA|7Q(Xkqi@e<5c*(-9WL#f5vPyuriGSo%n~c(mW5WvZA&cQ zP0M(X@V<=q2=7h2Gv40P#5?2gOHc#*^sPx*bR1QOcT#0o@iAzI>nfFp6xstM{UN@G4xNHzB-0}Y12nPCC9{8*5=b2 z^Es2byX?7R83SYXzwvTrtsP?QnnP!s>cd7_nk{`}Sj?8mVmd04e?Lao?z!I*ZR!8H zFH-`}c6!#hh!pCTgpBa%zMCR&3lYYWjX$s&H*yZT98Mt z4m$562oF(@+mH|kN^c1|>%A%nHLj4EkP3-2LGdVC4@N_;|;f`gYNXeTnuArYcR0kch4$fxHib&YuF- zZJlJLs_P?PBuuQl)@|GgF>*E2lO#IB0aii|F~4aDIRy@8Y$dm$ZtBYFF2eN4`) z^j06emqGScpOrB#i+&3K*Yd|&#il@BP3bj(Zs()XRLognEf~NlSQj%aRtmcIDW!^FzdBa`z;w?}n-Jl|v_YMo< zLF=~NjF@S%2r{UXRX%Urd$07yICg*DYU|03(@5>#|Av46CMkdwd-Go(=Sg#wCSb=)U%6f8$sl-PgQ;99Y+991~ z;>FRK;rV7@Y;igyr-1W!)T!r@8%24E*Q=GP1@k_nULX4Rx2exZf<4U+eZh80o0wp( zV@UGny;1gFs7l&OX4At!NxRIq!&oq!qJ?XU7Nc+#iMgNGCEUQWlo)8|W%Co7G|e9h zG77htX{E@qUj9w?e)=6E>_(FMoi-%JKIzjaN~QjoLyYK0Ur40Y8tci=N`jhqkYeW6 z@wiLU5otgiU}OciNXW?BHsTiWl*5>dnE=5WRm6uHq|ojljB?GRh&v z1n9lna2fVq4_IaZIcKs@N9#C*!AHM#Yy|4OPb^km%FfB=%M`A@G0>;!uLim#7Sa?ZjW`Y%hCtdI=>34>F>S?&X}jk~(K z3>7soP9j`n1$)ZbLXSGzd1{#$0(D%dN+UrqbXtM235j_myp*p6svY{XH?v?dLt|%d zk;XCWyZ-EGz6pif*qvGhf|tBc;yTw!OA9r!P72@m{2?6EI#MYf0Hsr2=hBFBch4@!FeiI zs?Tg(9--x0&1~$b%ZoMNY2>z67#1na*whfnZWp_fluN!lKVNE+%VkDji|Au{lLXdR zHS-V(K)!bKeTRH-s=CZul9V|dK$1IQEr0knwJb?+D6Bb$7tPm-jX{A33rgGhlpPKW zI@@VPol3LA%jM#F+d-!gt?EoZD}MbvgwNIH^AKV)jNe8tAyquOQ`Jla3co|*)mL@# zkbX``5?q&G@$SHU>v<5YOcJc&l~N2m@$B%TG)WN-`*@%QC?DfG0dFV=nJFu)Aq}1d zyz9oXPU!(8Mi~WQmis14N-7A01Mdaj&+pS}Et;VSo~h8cmGkwne6c>(z$yOF6rYWT zA5QPWl1}5GyQd#u2~>*1!V3#4;WSE4BgvvDk0CtZ^elZ_K3pG9`PryHyMkycDo^*B z7$NP*cF6Pq?11p4^q$ai>2eg=RxM85n^-&7re3Kn6ke|64eNRU?JwUnPrq8bhJZB? zGsOl%Pf0OkVjmtRmf+>eHK8h>MjM4vjKy{bdTp(&D#++Y^}^VrS+FDuD_v{F&N?p( zwM!NU3B!|2&Q1t8ZRl*+W$CX>Rocb7(3d`pDw%{n49gQSDC3Q|;Quk~iZQO{ATEYG zzZ6J@J{!b0O45uU=ED*qj)oH((I;^-+)nny#mR8=BI9IukYoceB%>j|JHUEe?)WoF z#grmWh7)lTEDkTlf1ka_cA}g{(420kviF+b79m46ap#^sM!@*=&Jv^N1i-9&|hTp2in62$p6n*jBRhA4StYKW{3`uy zA>~4DT{{HN8Z=X!M#i5vL}tL~2BWW*HU7dkyX^4L5r7j5H+F%zMnVH`c1uWLBkO0Z zw24jdO$kV0dEJYVW@50`LSeDgpc`ie@|wzi-jPMYT-BQ;69LM9ELNO>5#KNFMCu>q8-J*Y#+h`GUu_-MrG15m+W8%SkY8DhDpAwj zp)UDykY8B>re!VPP+Tp2>G%vxWYMDpR>2oS><_%uusZn2=ad20#~Cn_c;fI>QX9l8 z!}NsCj5r*N8FLCPX$YV$g^l@9`4}s*oxG0*m)@DZmks=O_8!c_r6r`!qM4Z2UqIzY zQ~8}#evx63gM55f4dccL*gv|SU zLLkv7IuvTj4%$hx9vjZQ+)ie_Zn=~j)q=&~@jhJ+${8C@A802Z@P`9yu}zP^f!2t} z!lx~-(d7Na7e%sI;$Yf)l}JC&{1T1m%0m{DeXI$&K6r#ny$QRRzi$wZ=Z{s=iQ$)k zjBof>n29b^gIb6o(i2}l^neDX)=I;BQl-+GT)b_ifJ%O(H@xybbzEsWV&R}%K1s4Z z@(H}-8=Cl?)F6G2o+7S+zOTJ1VfVjESgc4ImZ4#!>Eip)hF(b|=!#c+r64HdidS{6 zoYz?P_x`*nmIE`jk=nI|ZY$$h!SjJc!rBk^T)B3msAITkF+GeJ2bs=-9_Q*Yj z&erVL671Xbr*zge#lf&7{Z$tD(_d9nT7B6cF{QDRv(iR6G}? zaDfIOLizPcK~0JIl7Y6SE3l1aKXaQJeaMD6k+%K~2gileRXwp5+~IN^y2Ty-@ZGFo zZ56G<3chLgGzPLaJGwNrlnGo*=`487uuI|KI2)%xRh1})s%xN!Ac6pC)H6bc*0`-b z>k6}@8#;U3r9W~@=Oo=5dlaX@n2Du4(xwRsR-sEZ)~0y>^_#z6932=Qe?WOZzH ztoIfULIBl1bUA&xt6Ltc5VD|pcC2%tN!T!W zY=|)(tAP)uW2IyNq=OsU6=pY@#f$iOEn~GSz-~frx}+f zhb7YoWCp@yHHbMLC%z%PVeazg7^vmDwG%xhoeaUaTv`BKLAoY3FJ`b>bARYgAB(@z z2-M~eqUzH*4g`|x>07VJEB#QZA6jJiQ2NktiJpu%n9gSqMGbf%=)NbN8enM<4Z(0@ zB=$+TL;Qi>!wipC5VV&*kRT6f7nvWy`nl*XLv+rT{%J~@C17Z|WFVAFIf8C9_<^_X zPU6X^dzbiw<+~q6!M&@I(tm!Mb#_&Sq{Je_gP<$PMA{nziC7(o5ME{?MD$TrqL1)> zJeWB*$y?YBtQuwBWV$GmJM)%n-fZ)xMaC6M-&RTjmN|588D#m=)Ysor9~fw4S>_BU65{D0Ws(dp}S`&Gb`SEKos%%55ImG<9llk#RY-O@;DpQ)V?4z2v7Jm$8 z#=3vJ<`7sCz;BZ<}t8b&+x5gKxM~E%gFY6id zZG2RUAyJ#;by8H2;o?&wTaA2$QOPLcWfX`?PAEVn41z4$=dGLjA}=)oW?z*Q~0^3Xc(?x}iIK&%j`Eq%gZKz(#-|u10kOORuP`A6S@OZ*;lXcrWwy!a9*B zk=O*OUiRC_X12r9)w7ua<1FE}4=k0xgP&p%XOaYi2Oi{9O}>a2lRze0KFO190y@df z^2;Wwx{iOB3~9#m80iG_SdE0&9kS^Ad<)+L)o=ZX%ioidq|CXjvQuCznx1~bGNviA z&qc+Azk~_@R?$Br16Y9`IMa@onOVc1QC^Bl`qZW4*yn%?pjCMfjEl$X1GLs~Dy$X9 z0rz&AOI_caPU8bslJV&HcMVQz6X}D8v2`c&|BQ@4=yNu%6f#j`+o(*`wy}2w8~@I3ps)b!anmlEoj_c}TV+qO7jt zbKc>H&Ket@yPkQ~-Hg45tS5fMN9Ithv`s{bk;UKv2w3ZP+Xu|lS^eEXg8 zDdNDNF?5*xer=e~HA_TFzbb-T-Rj7B(&1dTz#L-5JZ6tU3Am?;pRc#a@?k3zAsJsK z#CJ~@KbIwbA|T@uI6dF272-4ZQV?P|U8VOII_t9Q{A`NAvli{JbcnS4cwtuEc94;| zicsS$TVMJmDHz)W!*ioPO4dr3ll{xI-(7Ge39Jm=2y&kLayIyU;N=hR)@Bs{VDf9? z0y1}wPzmMfc2J}9vzs8mu2a+z40d()2Fx$NYiC18!^}+Sj+4X@6pGz!We;Vgv0Ij8 zzL-D{iae>#L@6MOIDivis7%15RZ@TyS<&C*$2lXsUE46_EPpm_+?_J>TS2xR;~G}_ zx28y=SF!8m0~r1xi@JU&tsr~a4$Zy^%d2VMxvPW%b-4d^Eri^63(fJTcbnD9kVeS3 zjQVF$fBx_mVt->->9?Hyh1rZ|xAfo-LJfOL&yjs7;}02%<87CDn0-Xa6qc1sv&j`q za}TG*>kGY$J$eh_ee_c${(0b`szUQM(3>x(!|gQ7Bs!ADIIAN<-R*h|4Wd#ct24wS zX-lzc94gBY+8e7gTd#26*&1{X`?FhFU-j3#huHrk`#*bIo%M2Kv$O^!*w2p*32&ge zMOd?&SV%)t8{KTH`I(K~!8OM-KO<#Eu9kfyI#NsGVBV4PvoWR6QFpQZi%Fo_o8HIC zqwjk3aKFRemAwgrB83Tr9uy0)ac+=<5TK6uk59Z6-SQ$h%I~z6jgKu1KgOENfTV{$ zYvVLkS$`q>xw^!WAp3yLTKE2~f$-NxS^mnmyE-q%G7sMuRcooqw5S^QAiuK;zY=R+ zw~+Z|v9I&*A{^PlV->FAoQL85ynWV_V!CIw6s|9d1VfKzu@);W@fFJPCq5$ZLv*z{NZ48|0&H&cwGv=g;I`ZErF2`pHdY%!Ti5?yGW`%6%a9 z)4V#)gb*fI=K~Y+O+w^qXgO%%;%0*-A#ZQ#HqQUO+uJEyB2H}3menMDAW$l09pAS6 zYhFa*>aj0onZKfL((^zL(7v zAMCva)6)UjAkxf_FSAC#CV%*$0b|3Hx_y4>cpvVo8&rB$zzHtxys&rv!KJZ&x*cbk z?Xp?cnY=6*9y*krmci^TL8n8GOb8~k*;odyBO+wd4+_7p11w3G-ESG<*I%|2E=gY_ zUu4HbNqU6e4E<%3j0B5aUACZQWXdOBI*P}{^cujD26&vENFCaAPTM16W8;DBgpjQ; zzD(J3u4A}lQIgrkZw9}*Z{yr_bo#Q$ZQ(24;fcS_$agfQXf&kL^@Iz>UhuUZ zk)#(SsqH}E(dP>|Uct{WXbgXalB^@FB+w%+x5Gc=oxc((;alw5E0F+3?vg`9$}ZLX z1`VLh{MGpadHd)7gUBsE2959w6jwHKhl;A%2+%G=Cl0rMOs-nkq3`&US<^48U{?Yl z?5`XqweTlnMbW(oEEIF11EXTE^=1}BKO^mlN0E|QDkAeSDiR|$6O0Q9E6F?}GmK0Q zOF%Tci75NIRFDs6Wio|xX)oI{8G+eI{8MT=cfVBkPY`nA9vOnuWwT<*tANTict|AE zUBxpx8ApfYqH1xx#`S6$+l>(mP1b^aGD$%x3eQK_+GeXs1G7#ls{ONSpWm|o&+>_y z3fW22EODf~L;pW}=L4TrecyXxqD^b+^F&iiJ66+|OzcRZHjxC+gU=&$1sf`; zovmf7R)%>htqG-uSk8{ea<|z_@4f7@-RnlTdZpXg=pSYRNTOB@Y9&ewQClI6wgD8v zAIW`xzQ1$M^CUpEuG?O_S6<{f=lss^{QiD_-{1H5{o9urc>tX+2g55r)CD#05Yzy4Gh}nN?mJ^ojR(T(*W-ZJwlY5X14b05ZV+Al|^2O$gKCPh&hI2~}h09L!mRW@F zrIhXsXbgLWBb&7yU=xTmi(vJD!t^CTBR3^R>hQ7 z=`z4VCh94;6Hw zGIialuijE_mQ|*K5%1LnHLH2N_54zJj@@j(B6e&soYRuu8BRg$s zs$&xThg^X7sqD1H<*AN$iyaZ*4-4Z+i7iuC_IMo+E~|l$^fHByLx0CKEu~^0y8`gN zKTW_?^0-&Gz4ZV(tIIOdSxEd}s5HoVbQN%t;!67sJ*H-l(lCuRUy%by;bIzYm|A7U zyiuI1_DyQ@xYS)zW&~U7NvCAk!kNQ+Ktm4q5xn3A;6%=KzB(gQvtWbD z%mvq=f;Z(IUhOtx2jWzr7M~M{m0I6aLWvh=kwv30Q})0RMQ2LS%KDGNOM1Lvd0QH7 zwCu%thwY~cD}3xbd{ocO9YKCIM8w*xKW`m=4%VwmnDA$#G=4U1uKJ-`nkj|G>87~j zq+pgEsj^W2Ls=w?{@ruPl<2e=24^Tl2+>E8MyBHzg#8+a0LoD8O!eIh+n}H}cw{jU zvIEHI@t}mX6|`x*yGX?b>1&N$!bx_yd#YX5)N^@lJ?I19$*oGFE{bbM6shi$t%a=mtqA1ezgH9PHIwWRI0aQnd-WM8i2CvZvCA!#4gK0jLb z$2uq0X<&VZr3%+llMc0e4Boh5lGN8K^tpKAsNI_rF>ji!p446Mg-7LeZ(;C9@t^%o z8np;bKyRylSj$=@UT_(}dnM%keb7_SlzOFaK@oErjw;0W4ky5d!%*|E3^n(lDh1!%nJL%wRmkt=z{RH*70h+~=X@{?7lvK$9b zqeA5-2X&2U_u4854CNJ%D|C?cvSc^f-`U#dp?6B-DHR5m8YKfJcE^Pdy^K7}H#Qb^ z+c>P0r0#qSfE?%teMeY38!Seh_t0qN+00?o>TwSE5cyE9M|t)|!>25E@L;xXUyB!` zI@Fs-tI(n^{bziZ>G~;$@3DT6zNj}i4JZL0of`P z=r78j;imcIl|m z<(GEF8X9g;q0y3gDl@V@GqM#o890YJQIh)FE2{7-TScW5k*}89oj1qQGmAKI2&*QX z3eLtbqb^TF-*HeIF3Eq6ySIL%PL3lMKt5JR)}LVL4(&GNoy4uS8ZUGyU|#hlbhea! zM~{2b7Ddip>+YsLOWdTKZeA{|U|u+)h_jt1?!|BL%wD=)`S5sXI`Pqb&z|JaS&G?P zWyOV7qkp$m71iMyrrnA*)=;zUU*I?U}pOLYXaziFc@x!*3PvTJgH zh~Iw8aQVU1m)&NJY}WN{xyxH^b)H3uOD$o;Ixfc7=-05VtH9Qh@F+9(+ zEnzq^n=R|yjSdQx|oQ?KwUX(?9mlW%o8%;G@;!ha7>Z5T&`d}L4$P0j z@jl{>JesXN>>rKH@Zk-&)bSSk*9S))Y^>eCV_>AK9XjSP8ic6yNS?yjlu3%&T(*_bx~TiOVfq4YD=5s(sUth5_L(B zr1fvJb1GkbUhea_XB)8Z#^GX+P$WK zSP`v*fgbW^!cXGtZx?`m24kP6e}*&~g<#&UNr8d2h3T zvQj_kdcmWBvQj@L^KBMTR_Z6suGI`oR*LZmED9zCk6w^+Y?r2SuyEk0iwNExV;gvq zAmgEozZq;}GJ1LVi{$gdHmSRIF}L#Y(m8p=;hM9Acfe?Pet0f2eP&`040f`Mm-)LEoRSoHgHk?EN>ZXyDwSexz0wyHXC5N;gT;AC zsQe&nyB_Wuf18K%-@v5=YR$9{NACfHYDkl7>dD*K+lDToo zf`==C0+-B>~0XvRVE^j^S+bg`EEgn)hnLl4ZsGk<)#z^z7kuRPbD>&RNO2 zvsWx_t8=cD;-Xi=b$m4`dBt7yiZw2sxf88-;hQ2A9*@Bv4hRVEF^BME&nUeYvk87X z4{+A6A;*4%Er*%OZqVF;Td|jF>B1?%TLZ&0_9`; z^r}Y<#XYLtxHSR#oA{uR;EfNeV{To*ceKPx5+l{cU5s4IN#j*@Q2ktRuuvYwv7e-G zJWwc&!bqxA5}D^7w6R%ma8l9+WF!X|IzA#TSxA<~S2kXmx}p4CxjKBLIO4?Ic%Y}| zZ>!}rH78jhzpaE{b$yt>$+=n_Sz8<{7)z7X&WhK^$Kv&&oAj)BeS9olAG%4;ir2@- z;`O1M^jo6!Q5mfdob4FyWPKo>|Aw(V{d=x+Wba}w@N&f3!af}q*1XkFcp`d{nR~Lm zm+wy>$3MYL4hs^7%!D9EG!e{%lYV72?>F+ip7UC#z6v)qtK`t}v)n<#9eE1p6p2x# zyrmP&NoSpe-Wq$}S!(C-A0YV~edG~Kj&8dn&yC!@_4f%~Pv?6;Pj>b+t_<8a+Q+TV zJk{1zOX0~V*f6G!T{k-HB;Za!94dS51EY1_nP)Hl4T{e^J9&owU&JXc6U@UdyhrRZ zwk$?4IyE{SLp)R#+R^N8b;OzDZW+)H&)w>XQ}1qd#F^@D#Y|S2lXxVxhD-6`rqYhO z@EKGz?-%QmOl40rbsB?md!yOx80T)I3Ei;R&c2~L0vkhu*0&*k*4j{enZS zIwR{x4p%BcTC4`q5twYyK-dVtNoEkdAje{u$H+$Jr;go$F^~ooroWACXhV$guX{4S zNpQCtVLLREbG6=u8y&m2JgoJW+qN>Uv^;qHpC@ws8%)(z?S)c8DTd`s$%hm;2r4|)bhW2DDLSbz@- zb(ZP}OFw?k*UvTJ*ocJW0HUPIYYO^YUy#!rJ3(QFGxwP2m=m0!lJyM2y{wm?S^fMZ zlubgCDy34i4#yOJ-l9ypfuJemA))dD@L9d1Uvz%T)V%~PmRh01b)(-ewpfcO)+f>U zz8n>M7-1M>Rp7O8y5yiPPZS$q)cFF;Ax)WPEC6-9dXha{dhmDxLmyDe-0gg=!L5BV z8(vllgRu+YXQu1fGf|Ox5@i0RGpGyAnH^kEW8KVUhrIPh{?{nK43yM71C(B=AC5nI z1eN3OO^;yj<{A7{^1}{U*2yz!gO#P(l3u4@h3kHTNaQ9BzA2jYT=)qbtLKsKbqMuP z3hq%La<^y;_aDHmxE-g@6R@EBgA*}1{gA642N_4{6TF8*!@RBAa_c$VAC!O2RC_;f zw7YwDxHe0L$yj&maQ&fC5D{(cz=u2|r$3iY_Ed&ZNtK@~vW^mcC_N5HZHzO3k?jCV z_F?D0Jb{XY-u+ZBAn=DkMY2sRrBW#gcoZ@N9_iZRyd+fCMz8|RY=Pd*azgMi8ju%u zf4|IUXO0}|LTP1B3#jlZ&7D!YyKNh#Ly9Q?p-Dd!Q(%wR{wPYKeJ$6Zwnn%I<QBJzl6dI|{9NWD+M&l3!V9-YD;@WdQQ^ljCCt|5H00U|c0$z&4sH0KA(qMGwmmSbJp)|1toYZp7 zD14phH;ftI5`9-RzEY_;MHbu%YkXk?+4%k_e_ysVhX6<0AS?r^CZE8uVy^B7c-{E{ z&T4aYKTCD&1j!aHf#UPrSb9~|g`X! zukl$*V7CmHA?Qop`6q9&(S&$2Zx*w{#@{+dfxXlTjr1W-&(`egK7%tg ztU?zF2YJ4^ia?*z$Q7KiOyzq#qMFYNgma=s34kC(7nU_hQKH;nqN9cvZfj*@S~Ffx z7N23$KGhOl!^<`O+(NDlQTduayPsZ16W4KzofM#y;zY}9Z(7fZvPrDDrrv6-GOFVd@fV_iL8h+f&txd-`P|u9=@7|bF+d$V z!`}4}DE@J2g-+~6>ODuzm0Lk~7h(pvUU=IXq%T$$`^?f&U&UI^KEpAvb3j6o z59u4c@&zXJh-zNRqlPDXT!pk>qbhCGe(717!}NW+dqinNx_eT0!@ApJB-N+bMG$fb z^h#{WrS6bWgd`31IG42IuSsIgh8R#GRQb$>g;K^OyP>c80c$`WVN&{IvUR>5Gdpr7L?4!0Euia?04<0edJvWBfdn+ycNnL46eeSIrJN1MdDT|8}pXOa3k z>+WeDHfIoyd>uy%YgAf&>g(Gwb;Bf+ppr=FZd&mpoMZwzjn%!Wj@{hUSMNuE&Tfuc zccR%Rj)wY^>X5L7ut?~HpoLrVT-3qNY)OCAg0xX;;2YbOqvL2Za1J&ipn6ZWF1+u-! zwYY2_ww%cScjnmuzb--w_#${B|F(g9X!zs@M|TIi*B;zVXg)KdL@R#4w74w@iHt%+ z%)`p?A*Z>v5be*0nGsUk)_Wz7PJVC|TlqzgvQf!Te)B~=Y$p0iPkC5rFO$Y!@?@FH&`Pymb&Y!pvlNL{ePnmx;-PcB4u#b zwp>R$(KZAaVs9Ti4b}xF=h+C{)@Msl9X0?qd$Lr`Me+h;^D*V9?qFhS%xf+>qNkrR z71N~-FGpJ?I4R5J#8_c6T@896+mJrQEGuq=>$xsJXjUATb?2ocaNVJTj!mQ9lXst?@>OQNL-MckL$~$vaZtPG!N+Jpv@Ut+!yWQu_n9A zilmO3xip^)3La8BMWs)XaZAf z(^j`z83nKc!k&*;Mz&;cLf=y%v0bPT{&>1-o9>_*&0kD~3?1jw#`J_P-J!ycRF+5- zJTy<}y~fv1HjQz@s?8olX&Lt1=}|X6jxBi-Wc{YCou3xZ0uiN5J(w ztxSErX|>!xe!VkWw`M7GNy5rp-OIxFykEu6u&sUtg0Y8E9Y11J-;-Ny_wwWWo~D&{ zzm@yOYM6H95y2OscCa3@TLXqzK2#YnMHXMFQUu3hpkMT^m zD252gg=4hcrY|xWaA=>z8}&Xt#lXa&{z6WJB8U84PJsr>68ZnZc2;c=d$%Z<)QZ2L zz47^ll?{d9yqncxt2q6M1izms;P;~i{H}cs&Hj=R#gM4iAxZKsz*BKHFeOQ0696{n z$WGc1Ni+GElAOuOc9JmRjB=e&uANCPNy+Mt*xHZb7*t=^Hw8uhBURf1^BCh_{ptB^Pvyo4Ikplf3NLcVNS2s;r8mdbRc*;iMLp1 zqMtd4R?teh1j&S#@fLRzaKH5}-bCOMqRS*OK?A|X@DhYgM99B**sjZTz#NoSp}p&)t}U! zO8=2kmXH!vo~l$zrBc%KhxkE49W|BAO8DL4yd+fqE)-V1B$b#i5nQBewlc|=B zIq-6C{xd8tE+u2mNP*1BDwH4>rXJCN;7v{9Ypqula`stqspk3IRO%=FNjR(2 zK$7^Z`bmG1CF_#3rXlfB(uq>uLBc!eZ?%(|AuszTu=k>dmj?8f^sGyzRy@ZOcsS=1 zT=bs}5Zacjl`Yc>9gZjrQWJP*Y}xHJ+G94ksK0G1al!Lh14B1#VfO4X{PP7}Oy1}M zD0M-Xn{g2hXqK>f>7sO|&*fgwY05CV6t`kQ=OmYX5*QU3@lfl38xSAe zBdLp1Pt(Ol!C%d*_wTEe9v5*^|7uRzKT=QGKhjUxzoJ&0qJIT>1on5S@KW2)+g5|| zhEjLTcgtER58{znE1nV%@Bqd*^J`kmX1+yyjyhw*-uiZ)59)cE)1p)vZ*yggR~g1t z$>UVaP{Rb8oBs3=QxmN?@WMqR(b6qSET9KVtR&IJX?ElW2;wgd3|;sh5CnV-!x4xa zh;`6uL< z??W;pPTlteBt;_*!Xl><(R#)*6QYrgwAqX@G0haymmnB$$&N5(5GmW2EW`9y{^M%n z&^5T$E87g+g!_@kv!s0D_{}VH#Y?8VRI|kDl_py^?-Q0J{9tl*S)IFF!Ve}>Pe&=0 zBp^>0eh}k>;5FYg*&o6l{$q}$-K^uXBifrcX?H{A-k4?v38{{9-XQo^QZX0N*4tSA z;jm`g4|Vc}Gw2n3pP0?L_Hj{K$e=snvuc<90vz|xV>5O`jTvP--IpjBhR%^!M!_(k z*PJ*JGbiWkUd||Nr}jSsJ-FAy`6`q=(v3pg3q?`(c8o}W2GhfHIS#{JIw?Z$W($IG zNE2JfYZn9~HG5|q1H*-XU`m890Q~IBpbZ@mYVl7S>CNoLF7B))*RC4--aTveD1VkE zV+B+v38v?feR)!n09KRc%l6iP9OR%DNAysiOf5YAFR@&$Q_c;>PP&=H0MNu_ z5{|OR_FNIR{M7Vcu+m5MkMrFl2if*CIV)@ei$^|{q;)dh?Ng`O{-&b7Hu%#Dq*xVmR`d^8bY4Y(^y?lHP_%Kl}Exa1y z6(;;r?%K>>xB0*5O05vf9j|y}<64v^aV?mY-7Y?Q_7QR2dw_BXPZ!r>pY*zxTt!?9 z8ukcc&c>ecu|8L#^?%fTD!^%W?Tnm=*FHH`DL4cQbc`qwHmq^*{IH*0$zQ=aCJ*o7?~j1;L`+LU{ITSBI&nj%$KdG=EQ-Yv7E$EJcI(@xTK1WJYuu>|OqG0P5YrT+J2^SXU zC86>{@HET8bRJFLk<%a6Fm}xKhvetw3#be1MqS{dM*naef{FFO=|bcwt07&5(X1&O zRy~a@N;?p$4$=v5`kRON9!n1&$_2H7aamiXS zv$gN^a3k+BE?G+_6{VgRCCc55_8$IF2l&P){p>^3D{LkqTqhzzR2;A2q}+#@ST>a# z&Wt>YI!>cMvf~#c-HO!1jG!ce6W!T;@*R1w*mvY%N!v#8uhJFpj7;?q&xEuPG>j3Y zg)iEY??-RvtR+iF&F87|GeubRN9D|w|3asys5{4<`y?g1B1ELW`rul1Z#W-kVo}_yJwwJOux;Z(E4R4 za(823=k$F0O|j7wxvRRQ!$_zw8s!i>j}teWV&i5KBXE^sqY^7`-0T!(WLmtmu>VyZ z(_PGVeCM8uvRg$QWNJ~DlG`_Mi%D{U-pAr6) zHgZ$$?yns}{X(iThk^Y`(w)Ie0ebY!8bFMnx*e_VKQ zFx?OE&pj}{F#mvV252{k{(Wxjd)=fnG5r624F9@GXJYvO{TTjr69=JBV`gtfoEx9d zYzz5@kgu75C-^gpC*+MLnV^ke4(tPy5gTm31|j%p7U6X^xHg>)K6_m@_z;y5TNWwU z!Tfdb+}yG6HM^$yfGm$OFh_{CmJPINwIO=SY{Fy2!nLAO33sCn0;T?2ip2>to}aJz4)rD>Unl5Bpz%=ZBJFF@>FBr zpMu_Of1w8JX}B!8KS9{!Z1v47?@ytr8m`pBgu2RXc&uR)vllaNR`zhu_BG9R;cBW2Q;!76i0xoa?0++GB0u-1&PTf2{kW(rI=Dvo)GM=Ez7aKQ^W&^)&6Q`rC#;}Z`u1#69C3KI~XEy_819pNXG zSm4{pAKCf%ft&vvM`!}WixfFuyNI5Nv@Qh?cpLKj!d`)#npj2K^BhE-J%3onfQa+` znT_zW2$;2s&|YeIBu`Q(FtG?3bOdjW>>e_$Om&RYktsUkg;gJA1#{e`kvO|H7Fal4 zR~QBpxK`q}T+VtP#G8^LnB(w=zZb{uuQe0cR%@n%?2)+Pm*!F7`{{gQ0=T_A)l8Qs z8!|K>ws+*Wr(ZC$)6jtKMq;wBb;CfK)~QJY6JB34JByo{@E2>QZx)kh3zhCs`yN({ zCUn~)?p*9?Tl6GF{rSq@Oxs#ZWyC|3j>l0-=zVTi!AuC z5beT$Wt(r9nYy_Vu6KaQMZ>(tPS)Y{3&^kzMG16#=b_N1E8wE^uyK6a>S*{EL1A$n z0FUDbur1fL4h`LKIdZuJlBwM+&fJGnedW|wGeMq#=w_2irnte~jIuVe#gVn&vOa5B z<++-?J2fPVDm%aRFkC+brc?kchr(peL5@dM+QSUcPkH^EUQa>PF<(NF<^%fh#>2xJ zFnnWOT!!D9GHFcRIhQ4a1YT}pr-&P7MpB>e3w=7i-RBwsAA_$ia&p%G<#;QXWY zsGtfMAzRTe*P^q%fbe~I!9o;B-%Fa-q8!HnE>GQAe-u_%cni{>CS*>1VAPF%w+$NFvSouFwQ4egOH1g%t@4)SI-ajT();A!0>%7V(ZEsmK_ zp=~reQ{e^>ipqdl&;!Eo-nOXYSv<^^?1V!JnyPfN|1^4L1k3`^A> z_=6AWlxHmQr}OZmPLwXmu3|v!9O!b0E1AwdUCtNTJ^Uj16LJ2uikQ2HUvnl$j`5a* zU&TP#Qbt^b{02!)?wZ3Imf2KM%e9%ZtZnBk(E%-$4G_?Lf*39WNVGrJtEcej_O!eM zcuuonfMzG47ts8;JBW449=L5Iq6Eoz>0&|uesq2zJHoi=Ofi4%aZVe}QWU`3yp9+1 z7aXr9CCW3&<>7E)wZP>3MeDZ*zdWir?_5PDZD6Nq&yqP~-mC1Ilj^TIsebaDvi{<= z(9H3?`C$kNTe~`w(6)69RUMUQThFy&wY z+r)YSi^SU?&f#+16$1>HS=ytfaswrYCi61`teDjqT-rx_j z0E_s?z!T2^@*DhN_V+jV!;z8JYvm71TxDVXW(5Suvl9)Gx z23i&yQh~JLmnvp20*B9*V|(QVx0G{|!Rz_&I2Q@<8J{Dzv)n?N3;9bpU6gDT&k*;s zc=PP>zJnmrwTDop_?L^rmByawP%MR2^?cjA&C^Be%ebxkNvYW%*8a#;#Uk(V1pJhq z0sn?R%6`@ZDcq?8s?-O)PT4zn5tfqAt^D*D@r2@koSLd1F z%jtu#VNy4wzMSjiWSp?giBW{njoI4xhvC&&Xy@mNvn~isNbK^@H*TiOG+-6$7wF;Ndr| zje(1k`xxMg;^4->41jQ=|3zE1bD@F6u`lThV1HE^RMs%H)#mvr;a=`66EzZZ@N0Uz$WGM%kE(o&xZF10EplelYkXXkN>gyA%`mh-{QD5FlTMg4jg+`nBvV=;YsVy}L0 z?2TMc`CBQW2eq^R2@t}={UHh(okj4E>E9V@H9WP&KWWq*T(w(XQTy>9{{(g}_tw!|hp zejNM$k!?9#%c9keH?WRB0|A2($Dah6#xOd~`v1xc&6*1$tl$uh$P@lCf8O^S>Tr&M zl89avmF9(JK#&dZkrsc9Q$r7JX=e)9-dT^V#HndV*u1-Gof_ZWv|i|C^fxP2%BW9Q zSxQub^RN+rqSz^Z?CZqp?=~$x8=7u&hZxJieHDDR;#lvbh~9cWWFX#FlPS-Z?dT-=j$|l>r`vZyzgTd1VW37w9nmr zVE!E$9W@uGW6>z`v|Nd?vzSd9k+=knVpPHcSi20ztd#T;ALO0orhNi{ug=;!Vj~9ts zi<(!sz*>va^hd|cjV6mw(~O{=R2cm>>ACQR@mMD78$>ttkz?<|4D9hDhYGS?^j&Rk zIT^^j+9K?>#eABT7eQGxuL+?Tn!h63yOZ_xw;NbMj7+k=2*v`L;2g|&;U!D|Zp?cC z*{s3B4H_V;>5$onv9oXZON~&f$(ddwQPpEGE^|Hl$7LW{=kztad$pyz@eV>wMb@pZ zsNq(F-A5ysjGh~(&}?Gk%t<>uH}cVP)5ynJG+plgBrj9wFATn4KR4)S7C(grG0~p> z?OGFKy;JC4xcvh_6}&n?)u?5B;uvA~@vjHc4+zYV&#=kFm`5X)X@3A%z1P8age@X+ zc+^f|tK)USEAop@X(*4{E0T2)BcsCR5drPR-l6{VbYV9M#DdAS=fS!ac}Wx zmRclIw@CzV(~QIe5qF0M4A!X?u57ESX~js(dk23*uNLcPuDy@3_y_frR8~B<@w_H` zmrdg9UrYnC4n28)i16(&yEf`i;I?Ml;tpVwKgaGijn_r`yTJ@_U)e61)@?1pV#6JN$){~gIQXj#uv17`X zpbod74E61~UAVgLO|{SG)2PC1xCr!ruhwifypAPxkDATA&;bVy$>y<2^WNRGn)hQi zoO;>>A*VvTuwMJlR7)|ctZ0taSzcPXVMo8Rch`?MaO$oXgc5F`zT92)3*9DSPH*DX zxE9K7ySLrcfb;;k|w=kyLFrr@L<}_X$+7;u)5$`KZ?~M2x78ZUX zG}u-}QI<@jrW!lZD;aOaZO{PNY)2Kk znGf!*S5DsnK(I-(M-y!JT;O)r_i~khQ_7+eloXd{1CG6|a>a8JS`l%Macy^4haIzx& zbmymu91JjO31Okf*(r7BWF=vH0LCpoR@$ke-g$|8WUR}EX)zbZ#Sd(SC3 z0x=XN906kmfOGEoCREzH_{>Hax;rL-*n~#Wa~4%#^zmK?2p#Wzb%Nu)O?&v(Kc+~S zzTXFZ*q9T6j|^@G@n4$UC*+VoA{rqUhlYfqvq_1DBc`g{97VuZe8ewa_Q?^Sl_^*# zTA3o+ICE?pyj4F}i(rfC-k8|?_iJ7}&^j+ef&J{yqy1s*`B{8p0?Oz72P|qDaTZe=TaD&5r4)Np2 zSA9)zn`MdFV%;4AballMJ8tM=@+JB(8Y}mqlU`9=G&ojOcSkREL?hBuxa}<5Zj5fb zE&f$ua1t`d@d2aaV;E<-|HW$K1F9_rKA`OrF5Hq)p~x5_K80-{Za7AfJ(P4cC7sM5 zbObD~KdRSb7=+E#8uJhj**e!D?TZ?Cco$lEhdPu;IAy-_f>Rc8^}@HFY3-I%Y=iE2 zhLqdxA$0_nU=eiXdYl zW1%$g;#j4DSF&~esXOJ#4c!V@e?O9_YEqE~3a<0N`Vn4_6)aYF$<6?>PC_rKt|7b7Nn!MsH$tT2KVJpVW*mpUv0S|>>SCv6AO)6j48E*oBCng{XGTb(`=zrHQED70lZxT%+tr#5t7UJq42u3_8d zjWi-5np~je1q};OFri+HPxUgLk-BQg?E9 zC%Cg>+r|z4gG*{+z6bx@-T$$BJ-8;aM;nd5+Fw{IFDd>SnejMV-+Py8BPS}SeeZS8 zFb=7C1e+|*a%A#@^KEHa1#@6{&BIyiJi0v(U#v}trJYa7@Ujw_uY?sG+sb}uLmit& zmi@3?BQFmV;bmu#izy`6Wo7n38DxLcTFfa6PqGkv5?fKME9WhjiCSmF`cio@Zdxa< z&}Xlb;z!NfuH~BZf6+8~SHf>^Sl(aSl=`R6hUL%dN}LDh7prYmwswz4TzV{wfmK|} zNoTAIM#OGnEMuyKo1i%*E;`dXfr8?dnicK?nXVT=B0sSdMMCWFdTowRfFZ_owDPzmOCGv*;>Nb zcSBF&SvuEaMt&QqYFtZgGF~`vqKGpn0&fV-eI8L(Weti!aQ-K`#Sh7FBCT}i|h?=)>MH=6f|iZv97h*Zfl$ip$>0RFt8VW1si) z=0}l5Su^G{+fw2GW*9R&ULge92gc!Ls&*&d0X~2(SXs98ruB{fk=h+Dke}?GnwUK| zyy8~2KS1~c7rzfpO1J#z?2_wD-ieV}y78qUKCr>mrj0IML|JJx00OIt zINDF(txRz20FGgwSQ5XYC1uvChx7N3IiCQKKLTVv*auAYe4#QzcW75OkH;9bW{W)S z$waWEt6}-(Qe1;%O18?VPX>MrczMH#PF#DhBWl86s^iPXgfbrYOmrO|2 zocZ}VSC30oGVeE^c?-7$ux&{Hi_oV==2J?}lFaq3bCvUgdhS2}B&vCjDG{U56D)-j zJNRzGxA~d-?R2<|_4RpTMxLBy!MCd|j~r;F(VNTvgIqHBPqv(2gwOmb-#{_P59UrpW&CF} zHj}!Nc_fzeU0;ES$^;b?2@a5>-R#PpY>#Y1wjG`Mr&Pk=jHj86wSDVK8bsZVyB|0i z*YbX$t?bW)`ri6S0N@}swW6I5XN40|QZF4Q zQBT;q9UE4#O%an*Wjv)_KAx$supp9??cWsya7Rvz;$oYO8V&Yln0_>5O6Ex&9 zzw8?*i=|eqv~{vUxX}yR)+u&5Zis@aiD2y1UANfVwpF=s#s~pHN^K}`=hrgr%5cJq z8kYwDsRni&9CP43p$PuGpn@1IQ)t+fr#-)7GhUgpB~Q!I%}-f;P(x9qgbkty@hOM5 z8sR0+nbHHz1n|M5=qsut=kL2RyyyYldf~ODjK`0`F+1?wKLL{OaS(`NJ3W#MD=HuZ zcYv7~#Gy=AKWg1gYiEaLFA?paG$+!|;{UvoDM4vx`p)9^UJ+ECKRdW6J=?$N{44yb z^sJ!j?N#( z1$ch%$<#e^>wCQtqFh!Cd!>-k!QB!Euwb9|>K=+3aEFLf=xEwyai)#DH9PVpzsCpa zK4cY}bb3}ADZ9pi`}6s`28ylnT>d_(8}{_dE7RXI**h}A6(SxagqK^iAQa-V;Sa12 zwD2K(4_+X8f$1sD)4?eRV)_JX>Zx9E#Z&#*aqs4C!S4Q4gaz`4E6$ibb3hJWjAdSVX-8L-yhw^`y*`ay7j*(&Ul;Bem!t-N{AD(N# zXV-BEA(j(nM?*xMg#zoz)OI%dU5bv)sN(G>wW3uJQ5ak_D5j!)kwHfWs#1{t3h_TU zA{@CQZ2dg}vYzSU5y~Y}?ZJ`lwc8ZI)&(V<%zhmCJK?Ov{9CZ?nhLx?R93jS+dI5) z)*0;N`Q6zto5sb*Fi~p{rf&alt|5X+EgxpNPWV*=$st99$s~gphG>X^=n(}bLE(P# zgGTQIc8~Vr`((SokUL^Q0i=zO_A3qe%yLH>(A)UvkkW>fHl#E`YZ*}wYAUv?o!r%y zZO8rOoAKe(g%a`8t$*cBTevC}exQ_X9K{JiV(qpZ+i~p)oTg9A)NXeU56vvYe>v0s zQ`{ZO&>|XIFgYI9cYEl8@huzYS-Fy9*>EO(LlpzBlavBwA)nJ#p8_-N!1L#&f}oul zqDhA>kKr?J|E=$$>zjuOkA6K__T%6E)`|#72h7K~Zoz54WNHZMry;r#a#|^2!7T_y z>CiB|m*iIgG5awTBS>A<6Pc170OM2igiNA;EK{krkPU|VN?;pI(e!$y)^xy&oqi|4 zRJ8wc4rzRFh~Emryr<_rtlJ3><27WiQY$BrTG^=7%8G}h`AlaO2{>KFtfm(zK3F9I zg6WJ>E6X(3+3jgfF>crM|1(#|3CWhcbG*diiMcLkz8V#{ud((B{>ITB5*?JO?aS2; z=bYp5FBVPmtZ>S-tZ+gW7{$PeDeUn|u%ddJ&HX`wHfmCb4gF6)(&X=NsC}xb_DBN( z1N}9n%=lBF3zmSN_QOvI7o1mO5yVAi$l+=ZGpWOBlUKS% zh?3*98ej`Yp&nKfjY^v;M^Uw4hdovm$D{Lt=^#XKvJai(PbVxI?nb?>v!b4y+C0`_KZ; z-&*Zncn!xl6jY(=azU2yfk42M2X$`YoZ;|#S(nHrs8?wCX1W2rFT~;~pO_Z%t@Mb@ z!WvG&?iy^#x4c7esN)i({`|5&_$Za*8cgN|qXH8~dcVv97?lz0vhp(dS}Y@m#r!fn;8a2??IPTZ4hZphS!c7v(hFht;xv~te*#W` zk~B+GD`pywrGFe_%J$K>`ONt%?1CTQMFYn*4n*)?S{9j4oCz>>Y2T+nx(_%%fHsp#QkFu)myNA}(+LrlZZ<$D}I zOT-oF1gq>bYq%nOC=OOdH{*B3J{sF&1Hc(+zGAyJcj?iBRb0V1^H%JxExaYZD;;a! zQk^Rq0yv59TEI8GIg>tY$(CSpS)miQO0c-r44H#pX-X%{$H?&3Yk*4;pqeAOTU0c+ z*sG*-B?;duBc=;9u(Oe6G*(mmnUlVK^|&UyGx|R^-Ur+gnh;Gg$6`YntcAx#2)HwU z86h@y<=?`waBFJCAF&;)L0O{P;QMh^>dtRL;k$Q#C0d_q))D@&Pp%<3dEoW20rSXA zT_3I?w`BYu=W5{za5DWFX3}tJdgYNZr;|bzlgfOS+3_%Sd#_C@tNHokE@g!{dCp<+ zQg&Iw2pS7|?-}lFy<{T$`f7HaxAS)`yUjHaK-Y-!C86@#bi@4-Mc(p2yMJcdaAIuMWJC0^cI^7DpJsE%w{vdNk^Mxb+FMr+_&Kg*h$1 zF8}9ED-NaZ?i_rdzBg91Yq+|%zGN^psweA9P%ad6wTKg|^2YLC->~mea`&Uu&Q7V75F5~(!oIKl1^gFa z8UBhFsl;No?tztK1T-@bw~GxLAH7ac|H9!N12o9_z^jUlKi3ycj-mf5u<4 zobTXE#afdYf8o+hd)xSNEz^iSKADhH^`M&BSDtDY zv5GIn%(R8$mw^388P%JDi~N#I)vohfL_A;W)eX124Ki$4+{eSPmhsJw-(x?wG@1hO z?IAI2?4~jR%@QkRGePdUY~3?0(;|gR8~<$h#i5+vcAXb|amWiU_Ue%Q9BHYD3c6U| zWc=Ubv-}TLP%Nhck@glfsphmzsYqrn@zsG&9t{pB#QeAQOXJx9JcjjodH3#--?eseljOLw_Gy8 zf{8VmX$vM!y5$lDvsaJ1XISm#t>H)uBFTJD+?@=kts3?ZTE)%aIpWXBDSD*Xiz{v> zjHoL|THfrMqbF%G;JRTNomsN{B6fBx0zysl$qiI)aH z*GK3ZR$B%2dtH0WtgRdrHbN^PNam2ckSSS+*Y>?-ID5s7E{=lo8)M9>k_6JBr|!;sPxl}AI6^870})odBc;1v^O#&id58@1ZcbQQO6oupmftoh^4 z0@IipMAaN?`JJpYngJeEK0>u37~m^*d9yrzLHj3vPvycW5=!-c2JJcy(I-Vd{?O5f!%eQutt* zz40%=X-v5%e6N}FXM_J|rg={D47+A_n&j z@TMGr65*F-x=xg_e(+4hacO!>F$T|sG=s4uc(>T-B?p@g%O%DQ}=@wNXE$pjGYtZ$xw0)^XucK1r%)rSUW*CE$x|Ll5vNs3W{{F?<#~D2jn7#wt>P8(SiLCWLZy#VUTT<%0$O`!B8kM_M1B z8B>4UlepseItm|rd=BaY(OT5rTfnpTpTm&3g~q`9+uUt1&0X8KmS62wUJO-Z*De4N zS#m@Q)}zh?wtlYqxO5fVF7qejR&?g^xNBI!>OjA+)(b!KC!dw^$0aMdL``_B0}L3V zh0O6@N=@xj|hYkm_kz?NmE?hR{FFMn1%CLRCKgD zPj3Gw8m{`d)_$QEA}(0wlj0F=?@niZc8_I{PPd`Np_pl+aO%g8^fm-DtNj_(=HA5C z?iH+GOx&Yg*Sv_F?S(5>(mvVp!RYDqbb}oK#vW8Gu3&p$-Xr%mqh}<%Ev7IaYh2CM zuIB2I-W8oK=Ox=|G)qF9Cr?-+UyJ7Jl%0)RY<({+?(A7qIWlMbuc4I$DKCBsEKx-OW+r(fBzBXMc_dDgx)lV3kMu{$4ztR_oRK%8b~NJ zK&Fq*_6xS)4Hr6F!7kEwnhxJ!_}%*Z%gQTioXR>)1DC74N&8-9K8lJwO>u?(vbrEr z?w?BWu9d9IB7hGdg6sDYUe{owXwk=TT+Dw+;P;o5cZoXUokUSnr&S*po8Zq^9l!tJ z`C$AEGZ6r93%xbZNg0Ml_zT{A{qe4-V(W z4&@Xr#94mX#j}Feiw*N3Rw_W}+1ZkVF>po|#{j=v)9^aVFMyWH_V=jRQETZWc=-Ph ze?$ATKOGZAb*SYno|}6Q;Xz^F$CPcKgLipU37YnSValPt_vthc_Fv8&}n?t@g<3@hvXo~>xww~2mP}pu5=LpS4GdBGUQr&jJ?bNhlt#8rgaJH#A|@4I zMqhyhie`k8@rl_+nSh)qgdktkCnJyMf12>rIVhq4H&LYeHBL1E2fSHFzanPaCt(XG zgr)n`{TeUuhQuC40{1bxe-r}}?2_m{`u1~%+#Dj(V2Gab{GR;3SkYsS)`NGB!Ur0k z$Uo##2zCGA2LH*9UCZ9wP`5i3?jxnq?^pq28HN7qxZtmMk)C3ASs$>W3)|{(sj^=0 z$GXg}NA1qEJWleKbxOb4*b8w2F^_;;)>0xyi;HlhVwx&Z9lrVGi6@6^B!R%87N;ch z@Qc?j>73(4NV=UicdyNLw$3l7a7f^0J@%$S_tjZgrmfc@tv`=%Vz3A{Xtbj2r*n8LYFXQ9ir=jhmNnh?DhY^kEVFHUq5% z{}{lrZ!WI>v%BX#1vDlH;us*~wZP;`+C195%L@yE(f0tO@%b6JJ*G764N02c4g5t= zamjOfohp7EUb07N?2$#N{rrQa;L`FdE}U?w;x%?1KO!vEk|@x6>hcG%+$lHX@YL-S$&mB0CwYF@rK~ttpOD=_XzFqlt6Tq`KqJGqo`0)vSihJ?{r%!q zsq{?#u3Vd{oUtlZdBs|u*Yn)TGsRue$ussjS7MnnqnBswa%K*t(&z9vl&U=2Yad+h zwf~&I?*9Bg=IXGZIMnjaVtOQ){`da$^=1;heaV4LFb$dlDX1J?Ts=E%eW|=9mt)4^ zAVXmhW5*jyVWpzEdoI&GBO;=lzDUL~{}fFgwc(y62QomTD`>Z*9W~k^CZJA;Le7(a@ukyMZY?io|YrT5if?(7nL|u15 zjdB&`zB&Ix#I~5l{BPbC(XXfd9vU3UseRvFU!yYdW?da!ML-Nq;7Imu7c?I~(-1ToKc^j((ivRKZq1JJ4I59ZjpEGQDq zh~pp5Sd0v2sT-Ubi|y*qSmcH6E4lZ&+gB-xf7~iX|2)5axh~!9tM$mg?)J5Ig}@2F z*Uv5QhN2X1_Z4pSQvXQpb9cJ!E!_4LZaWLN8wf4%g_f!o zHzA4pA?;{q^AnF+HvBu4jmv)c(Tq zOwg8mtVW*pW4*MGz2F~Ks*E`9O>oQNxJ_{n;#C&Or<45^odb5}mrVFpBnU3ehU~PF zry{Otif4c$wYjJs$}FP5vf=gB94@or2dY21a9l3c^b7J&ioUCfuGPB6zMpiWQ9Q56 z*Je1Qo-e#8XT4qh8BUu#Ml-%^-++#$_Yc!wOU5UMa1!HGAB|Iey&IGIXrxb#r^p}8V12pe_dUk7 z{<`SfXk6>vxQ-HGQ5y@perc3*ar89{+muPX?&YhL#6NCVx;qy3%H`a4FJBucbT1z& z+*((7*A)y@;4lUky4UBGc(dXcxDb(2byvJ!)kB`m-Ud2oqPjyyMtyn zylFjLy<<_^0K%T)&r) zB}UIOl`~-da~lFpr06F`Rg& zoaazqz@B)d#gTvU{zjUg+sLfjzKbH6biyQ#?&!?FJa_^46!%S|_DfV4(wRC0yhHhy z(BVwod4-*^XpY~s9#vy>1LIjW^-@=N-PBkYRSiFh5FD&^)F4fNwYG}rl;U_4<|#N^ zojN<}`!w04DT5Ea(A4SGbxRfBNxzfnj-IW?sJ5wty#smmBYJnb>)8DTeCsiQYk>in zttLS?7`S0+qyL!*0B!;Rq9q{!aJNkgX1Lb?VA-O~^;;RdRj7MYzVv=^Wyt(r&in^o zo|H*7z7ltj(?Go3GQq73f(Y>I$}Mk88Cs!}B4AieP*mAoCNLo-%9xe;T7d#UAo?Xh zfrFleUNTzkO~vprJO)0N0v~T8&}06k?6f?_iNF1N0K_XYOJb(}vj9jDzdAbK*JyzO zAL}h#AqD`!8sYcMg=^Mvk^d=wA&`=P!lnwQZEG&rpjYzqmc9NMzB@*Zui#p9o(ZO4 z?k7d;c_3m<_QrU!doy5_JvzVD9mC&)R?W$XI{tp@;6;X`#};{RRCT}5^on=D z(UeV+3TZUD(383cCFl0g!5_wbE?Qqj{WC4{udbucT<|vrG__mt@>2@(SVoLnPz4wO zwb61+3XQJ;xwqo$%6>gzoDzG+=h}WV6Id~Xi|b21V#-1C{ez2m+3D)&;gTuTG4s@Q zw0vl6`R|E}IA!_evSK76*CC8N6N$;_`Hb~R7uk5T^DdTo>)nDx)I7J0f`5&V%isQs zk_kH2sl!32u{GO{fzpl#mtB&*e*ffMgE(*$ ze=W+D4JKk84w1y<1^I7DH8|CA3GiSm=U^)@J33uyJ)=td-R$+xP+BUUk0@U@n8GJB zi;5$PvliiVtv@apH#yKdkR^y$1T*ncMuiyXey4`P!P%0uNr#ZnP6YF4Z9&gpI3x1> zO%PSbThX4Ak(Mx0-Q3nSW2ATDR*{?ckM3-H(uW3_;7% z?!H2&pSJadKq-0})0+ad>RyB&xsT7{ObND)kymugD0oeeCoUN8JRlZZJPiDIIMV}P z*Ux{^&z)ja$0a4#LJI~<;~vGc70-}EECU}?DKm>o8NJ?$&x=c&V7~Z2z+2!VBY+}y zRWLpqEGo~`{ut-AAe@$fH`V>T^_gPWg;{>d z3$p~faiMO1FxW+zwpfig$s>$4 z#;Ul5@_M-<9Ni6Q%GI=X9j*NvFPyhJZt*&2MF$)IDGYp~?a4KIyNB`8sk**uKtY|Y zgwrmwPbR%sO+##%bu1Q4bvG^NV`k!#g`QTL`8O?IY?k1fR}AfiWcM!o$aKDs^Zn{e zuGs15z@HIDW8f}+iZ}YLwDE?^lZ}3_t7{CPMyUp<8n#o7SMNaGDT+S(*HQGUf!!8V zB*t&2yMitX19%#Y!9sHoKJX{Mv`n`qUB?H?4Nr_plAnRo@S~6?V7t;$_D{JYv@X&jXFGYj@kh zXL0*}g{3Ag@~EvX&{lK@KV#R~i5b6^bvC(Zmt)kDo%>ZGewYP%GCnQ_>p}k%=ly?U zc>X@45--Y_WO%LnWxmZOtnf21RWSKF;aOyzJ19ALW^hjr(sGpYT0#1SABuW$OKm{n%r6J?=tvOxfgtrlW3&8@bgl?bEHem|0?rO z;~({c5AzuD6FpzT1{}T2!jW~+Go2Y+EgasM)Ge{yxlS^FiN`S5-JsQ$ytfnP>&5Whcv5Pn`m9lp5^r|z7n zT{dW1&sYrN4LJ`N(GmA>*2dsip*@#VBNO$cZCufr4;HD@tK<-cn-8sP%f?{vaigDq zV(^g|7piqd^E2xF9Ld15!S@PG?uc_`EN#t*7yNf!a@Sil=~cvqL8x=vyARE%#sg#1 zZN=>D=i{NyjBNFS8OCco$={JWS6bjVa(WuoKDgk(4+o+?@uQEoehtpF@eOcz5Cu{( z%ynsOX*|Yvf&}nmSTv)`xBfeM!^sSX79#jA6%$5AP$Sn>7fwH#lkk$aTneI!OOF^| zU~`F-M-i2A9`U53?C~a$)PE3g!Q!(=$2vqO^^Xd;Z$-ODr4_Bjhu$HKzW1z ztTmDFj0byp9QNaEyLD3*!y=bU=Tr(E0#LuU|FUWtTze{(((ZT1I2BzeNa~=?^S89r3La7l+YwgVj*Do5w zg=SNM$(p+BADK|@*~!)y)3-5EaHt8ljY61V?%QlMU8#Q>*FJnTu0){=!b|SGBtGAm zTzDx&uCi-mY*O}!$i4oM(Ya19iLE4|Ta8}-mFQJizNtGuX%m`T+fcV%5t&lqpU?^0 zN`lo6Ku;i1iRB+SfjcEVDDiZnOM*f|3~K*6dhl@T*Ak9^CZv69F(eH_oE10*?0V}w zAm34DCT=*=0=XRXfX}f8o|0ND+OI{g75TduWea>N|8eMRJz3z4iPp^qOVeW*PbT+| z`A(l(+5UpbIi`XVmghKGSv-drF?a#IL+H0@9_Sy=eYTd+; zo;l18E!SCir^9usO!ia37FLDUFZ{LH!dj{;C95*KssxJE2(Hl#H?)PvMNfb_kTSLN zc%8hy#y4YrZy8OJfb4k@9~6@mWSY`>yq$_cxF!23ADC{6ZA#u0!vuMZ<2?c1Oszoiwd^Pr$k z-)aF>TYCDCU_#N6(;D$$@^%R8w{M5A)=f%SsgJ!Q!ul$*?K@$OUK>&h<&hJg_mtUd z&Mixmlh2=`*KZrPBcSYoXYGN%qfE;yNXBtZ=PRa-J7r&8>OB5EgwOZ)k$-=7Z@+y4 zD_gvU{eQc^g`dBN{mXB^+Bf9cB}eso2H4m?A4DteJfzt5)yMC9*xvVgJo5d&>~%f; z)Oq=ujw6oylQkV`{~`Rgu>6OQeHY8$3%-9+xfgtk{ucI7bWnHqWLp+$TcZ2a7IZq_f94eE+{Aw-E;$zSpXpVgKX#57uUVy< zUnuWQPCxtmLnXU`|1$LR4_FF8Ki@_07pI^7wJjC<)RsRx{m6ZVR(cnq%VSK8 zaB8fFJGW$~!3uGR9vKYRb zrI)Z6p`-jNYH<8x9Lo!z$$}ducE&ObDo{9_yUdUPj;P}fOxeJQ_lu^sW57D5^GwRE zrGHo{Ha2lqB}{yA@Hcyo6&N>HZz+gMHUvWc`#7 z0>1=p%))XROT4Lxjh3i)1O5Zl^X?m7#=W{a0qWWDd~??`#Qbt#{&~gxBSg!wJc%vG zop>OAc`ejVLl*Nhulhjt04tv+8eb*;r;_Te%fCm$5L<|>n2 zYW@Q4_32OF@77zGm{+QjNn1Yz;M_m^AQ|}L^hQn!OT%cnuV=CD2sCRiveH_cO#eE~ z+PiVToUENaRL6=040pyLqKTnZEz|;j+hEV=nY@(%+$P_|Z-AzHD|;m()#aNn9ws%e zp;2RArSg&!UN)hbsi}H))a#GpCzu9KQ#78}0)6$WNFyYpX;5Iqr){bwEoM?p2+Tm- z_yLZgJmI*JOeGjbc^V4Mn$31tn^+wGd;L}T!kfTP2R7hq_|4`8h&cQyXq;#iVJIFF z`)E(#NoKE~tqToc8H)_L@A2w?f4DT32^%Tv*$U&1JcWzK(&dkR@E*+=6V*l`qJrmR zbXsR{g#F~$XBDx?3V;q3d>%M_&yA4_7j?iLzg{X;>OpAT>>?o%VM#y`K_)pKP-@^Ils9-BhR#Z0T{W&@REXe`Uk6wFeXj7x_tLkG5n~MK|@t` zRI#$exPhp!B(S&5!vCodVQ(JDT@he(uSGWtxcq==7f8dxQQ#4r8 z4iD0@2iU=&!W?Kiqi`QvWCYpu(8eUY)|QgHzvcKPc-ZEPFm^u{ZLH#c%nl9YC%YfR zPOYQf=E$DF_c82#tZ-k>RDXP9PI%|HpWp3G6`<3c5mg7j`Fj6-(nlNnG0?#ohvwla zbQyyCHrdlf=T_nQB%1Vlr#JW+cmn|M2)!hYk`4YboYQ$XtGv@^=H!6Tg(qAeGnq0n z8vbU~ju^L$-sw*qV%rv`5HqhW6A;J^#UL#!?Zkf0X38gKul`%e8baVnShGH#^C^=0 zC-e%R&&&I~n3i^+QhDemAV!j2tnn8e2L_*1`SMnnoK?mN8{tCSOU#AJ=CB}N7W#a} zrzAoF6q*p$g#iZYKmFY>DB9ZA@F5%AH>BAbpK0)I&hR*o{SlShz%6|~OrM}-Q#CrQ zq~^4&g_w+oK+I3SHM-LKLPF3OK2-F)H5r5GjeC$^UF#?37*yG>**bI&JUK0u&~pYtiH1mbKbU@yXY?od>BIZvqD9;9tQar;Y42d37n_UGDun?V zP6G43+Q9fGl2FgE_n=T6vV> zarq9kWQpr-#5sxUG~&lq12X1Q3wKo z!}r5pJQikBl&+}5%%gUaHP8;kC_XLeMm_NfSNC8Yw}>&byM)KJJ|RWlI>fZuZ?BF+ z$myBIhD9JX0a~`HPzKNt(@wk*$pH@Sm$)C)ahbG^>}&vL|Av2#j)}`Ke-@%TiZD`z zrHOrN%`V9z;P!d}6#3@e0J}xfh*M zG0*Kjg{C^m@rlmM9PbFh!MY{{iSoCMb#QRoUS^8rNKv?4aAOVkRFh1c%*2jWsRm}Z zmb;OA2sUgB-nyQGD z0>u8Pw4u}(`Y&5N-xT4T&T#~@v6%MI#(@d)5!HVy^qZ) zt0*gT6F-9c!&>}W=*}OnNWj+16L+6nNZr*OJK3AIvp_Q}k@e!EH0BJ%c8oTy+Sb(d zba~{vTj0`k1)<#4T?pU+X|Smq0@ovPZ}r#l0bVLzN~E@LVi!Bk4$((s{mEw}-#Vf5 zu(j}JGXKGC(@w3vQJtV_NzfIp8i3{zRdjDhc`PW__4?S34| zFin(+s{O`(3dwd16m4eIa!`iHx&a3~_Au~5+c>YEpKNJ@ad%y1=o4v2l0lJiosiih zF|-^`ZHmez320HBZSyA1-%~NM#aVp2n<8Uq+ya*X&Z}_?xf_!&a?{On-|l6c(@$)P z+%uK4?GTvkzL-5JZ$46{4W=Gcqnuuyhw^5E^JEr}Nr#iW=9WcL%eW%S3o;|1l`=E| z{)cB&1)nO+r%Ln5^~g(_0aW3CA&-gNv%T55X@>Bj>$j3ohSmY}boBc`wys}2SVepB zi^A+}`*WMNvS;IQ_$}iW$QW1;cDM9UuJ{h+ie7WkTRFR31PUG&%3jUdZa{GeQM5{P zIY=}!GW$t^_%qUkUBOfd(TbtP;@^hAjK;nDaWwjwuyJnj0ZB0tW3rCdwlOU0n0?k`&Wh8jzo-Uj(^t+PYY0dBEO!susQg!Il^`D&|mgYW5K0e*qicza445K7MFL8A_A+a92J4|I z)a0u!lCN6wiH}!Xo3yq9ce$sRHE+OtEE}DVF2x;@5LXRN8=||X_37mJepjAqhR4`@ z&hut&irn+yeD9itLpPpRj_$77(KRp>S-(B``u@v)6I+7UjpNg+Zald8j`GO*&B^iO zJHHlN(o#0RaWLY20c)ifEpO%(A8%R{+$?Nuo;ZJNWh#BuNpi#x8^Hh^7+?YFhS=O0*+ybpar_}Web9lbf`%s;S78-f~%C#m(M&W}gdpI4rIz@q zo?MrXtbZ{1#z#AkzwvCGvu>GU$7a7P*9g7bcs9q(e%*iB3)z%GiuC2s%BDNYLCI0R zZ`fMijMw04&K}gS^o7>l9$7z@eCwnur$-|{d~w-`vm^P&ipaNaL^e?Ap%Am8OJ=Tu z&-#hqSo(J3(<_p{S(n^CCHr~%?RtDGYYOIo4^xo^dSu>!v~ytYd=t~Z`DhlleHys( z^or40sMSLIB{WGIPD>&wT52^R(w!CZlw!gAxgCj3jZep^7D&bvAd|}!4~j?ewq!Fu zIWM{ZTgjzDi&Md-s{R|(WKl|Qq*Z}1!@NZ)%|&T|i<0#|GTEY} z6@*VCF4PKoH=a_Wf?ihezgR)vKJa#3PTJ64EGO*bd_43Te^t3>xsFZeW)O`0-MEkWqNcq zstP4w+3p>^-h4wmyCNr1&%JV_WTB2{evVVNDkptq zmz4{;WGYy>VAJ@-MBD57|GS~M{T2?-G;p&_$h2P~&qpzNzY5{@zw-YD5T3*RzyHmN zi4*X@@?99087L=QcCmQ4{+HjFn0Op{=Hh>~sh{8S^KC?%{|+#Rh02c=foFPnz09#U zXl-_I0~4nj{%#tI2>7W=cz6jrvp}W8%z{eJJZlJH#Z?d?b~IMK+p_A5)n-Rt(qQYB z=P%;?omFOa`FlAJf@XKgGZ&TJg9*WHFBDlukKeesEI1|ETdhZHtBF=WpI4?Otn8-*mC z<663Rcf8-Ir)V{!1?Dkv^c7|+YRK_=$9_^ff5jZ%%bM+MXurw+2IqIl@k2Y0u+4*o zCLFYZ!{9tfj=&~9i#H$CC1wskw)Ts<@|x+A9Ixy=UG#Yk+LVxlcyp|A8{HnvkQ@4X zWWb5`D?5|qunjZ&`Efh5;Wk6g?*WuU(7~a;P|q$Q>%j7Q{t8xUQ3O685)--xe1X}3yN&}CGNa>npS(PiKi__>l)aZ^hPoJKNCULp z+{5MWkpKB5X*Uz{%;@?nrGB;MgHu{G4zpZ`$TNxgtufogP>o~Q#-YYClx0S$>{Y3e z2^*p3gYs7uBp9M$0)svocqnyK?UuSlIt$gi`Hz|NWt z2;kotW+2A7pn25KDN-Ga302p_5;F2Up{edTt&R!i2{gZpT?BU4@N@{zT;1$10bakR z6seBIgsN*}3DD&rFxB0ow8w;v6g)yB+Dc$&%_0Ww%2iSfkffiB)WtGFb=5K-Y(x>5 zx)y6)OvtaRn!vCTW#9^TvDIlxk?L4XsJb#{g~XBV^q0qso<$mFsjyr3*bo13G-Zj7?Z|DZboCOD5C|TI4 z@nO?A*Lcz50}IL|aJnk&xTJ@3G@_LA^P5X2tu2wn6}xzOG3Re=SFjF`o{4#jkRytL z8{H1H;O9OtozZ_*P~;?U8U42ZGtGj!{GUDeneEUz+8AG|ags*%B8?MiS;*DFnO(Sz z$7mZzrw zK6OOKhY2NW9ukUKvlBrqnL&37MnfTr)Xq|M=!#vc$hM1Zs)*9rOEk{*X3x_&b7vPY zUYgXh$0=+(^LzJfUjNsD@DDRB@;V!e~44^d-Ui3(w*(-po}ryAXAz+d807iKHF?2`5~5F?d1h z4PBby34?iVf`ONy+A;Pk1fZC#zCNk6%EdqOAAoFOf-nfm&$i+FKRU zv46L8R8Ep<_-jdBJ2!e3CQ~u`Ht)0Dbu(Jw`_r1vryg|z@wDGbYUURNR~zzE7U9#BOBpv$Q|3N`i>E1>Xv>R+ zGPQ;><;yTG6D1QWu0@=!{yb`GKs??!*3k<4DLg5N_PYE8->@TW%<(W`7$ZUtiF%(z zOWugS_Fy#m+da|p`=UU*u@Sk|ZG!%wz9 zCRxUZ*+Qj^W9QCRe+{iJlTyYyKApp#O#7MmHrub|`R!*_p_+$H&20Y&lYr$=`}xVX z-y}=>na!3G_3q-Cy@G`<;ac%OxZkaJ1xo(L?FT6PbLI#RE$*3(x`cRQ?hUn!7k$?> z=KMVqr4?|&I8O6qNWou0rZUO2vtv<+UvWH4 z@f^5<$Z_Qm_`j3t(H>P&$ckd^8$v5bl#j42Kt<_}<8Xk2iUwqvM@5@;nID&B{z6zt zWK^gX2YNaC|6=F$?$y$IDpg9fKI)uZRiu%V$YWU3K|7EMqjW%jHSnvFk|5KNRPG2t zl3}7&<6aGHs-6efEQSg+X{m*cTG&<#n_u+VtqSX1T}w~I_6IzcEU&huRFo7S=fMrs z#fx#aml4?T`EhWbS{#3}{^O|V&8T;^9l`;)%1v$WoJrRtqCJ5dec!uBXg&AOr*Z#1 z`CP5teL!`t`JSF=t?W*BELL|Ui#PB{5CV+918^5_(DF?W&xQ#~qt#eY!DSWF&f=Xo z<=bgx?ko*MkW;fIw?rw_n=3o|Bt&iayfY|9bNKRfsQtcMj+l2*4d@d(Bjarv)cijD zhS?x)^+UUZ1PlkdRTWEarDGN!(rbrn{MX=aAh~r#sGITtfpJnJ1ertckXdWBAMio6 zI?V}@lWxzmON=iY@}7@x+n+eT)L%YoH>OG&b__upIBO3^+m0c=a|{ElnujdJk|Ips zW_;BCCgFm^T?f~x&vbmS_TozG@rp0tPNsCXOxVjyu_HBLV|_s@O~ z?{j<+n^jmFEw4_@{bFTD#47V*$psZv*+9MFf>Kl4I|}_V4|2PTsq-oyxx}Vn9^T^s zHEqHBzl~#^-}k8!Bsjm!zkdw>5%0A9wP=6CU$p()-@?lAEiP`0O8DaegKe-Zu&E>q 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�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
  • vAJ_d{_jB#!+Q}7xm7}%Mp#*~PRT^^L*w)qX!yIR_>ijWZ zaGgR4%nA*+2o?z`5WV`@veh_x;5A-%s*t0-kU*h1`ay0XMPib{c|1}iuLg074`+f3 z)>SCMDCBbTj@9_L3g01xw0h{;je@4pmKA!@hViGCho(T-yh`2}Bj;fwrg{j$;Bgkw zRyMF`z(5{=$1gZpm$CWL>F*iLwtc5e7yN*XC>34VU45v%zY2}@AFK(EHa_2fY->DU zrW4^r%pw!p{O(r2az_LDkT?1-`CB=lZ}e7@1+)z(MUtFT-U5WR)BV~x=k~B4EIYu| zn@(t;vIZcFB96wMlMCQ z-$+iAwrpqQ}rgaw~^_wp+PpHg74QeUMWK zV~cNXG7bTP`0{&{ApQdyN6Sh8%a1$#qXj#gHE1?zn<-mgQ1*kaEPxY!ntmjl1on4Rsgtd{iwd5R~=4~_$2@Iq*xTn@M>xu&YHBkWw{V|vui(tBerON!a< zY`R7XH+5!agRKFj{56ITz_ptH8iI96tl?zd11=k6j;-{zFCh#9zzt zM>|xI(sLhLd2SWD#aQnb4g!{u97YPw(^A1(pqgQQq?qIiBd-QHZR3V4xFC>K-Vh zlH}r6aGCFtCYN+xiZ4b*%<%Usz~b=@r~vZ|WUNyN+Cp}Le2dD_=UrYyqCh zCp)2PFsvd-rKgs-`RG-Ao~Pp{CEUeR^{7hL{Zu%3koz!$mA4iZl>4NLha%e7>$>2x=gn zp^}oq>$7=u!*ssjp|S#;n{@dAMW;8;mOy%QYF{BizQ`1KmI5`wGqm?L?(F0n3saA& z{<%F=N%DQ`5@6FqMC^0<-Gvh=-XNH07# zPutsIbwpJBnXFH1+vAfG{X|u;s2ZgoK53Tx?zUiO<31*$xr#@PPYGb9!! z8bAN^SW$1a>Q1V?T3EBloONzsAZa%@$!^EN$>q`;d0yd(s3xR`BkokYNgCPZfQ|ELR;5x(bJiY z>2H#rAdTL~CZ!b9-`%#K#`O0xvmhNLH{jdr=f9uFm%ij>IRL{7%gmB9{u%i+6TFlO z-l8-3XROd(ur4_*iIdULj0?<2WT$5&SN?9}(bCyW|Nc?^60u+dvh-oZQS~fpq=*F#;k_J<6Y&N0A%E?$;)%D7OfdT{=o~ zA@WN_m9IXk!t$R|JQj1GUkM-HRzK9)w~?hDpr_;wL%)vVsBX;)=^=^w1PjB43YMK+ zh|Tllk&zj;d5Xl3s|Y-76Bk*Y(SS$fE*kuwT=Xlk9pCwVBl(&dn+2;a(!(O` z9#&yj#Lu+TVzf0N?CRtU;tQFUB@6x02S{3W7=gFGbFo)W#-^|anqTtiSiZ9P&%*RBM5A;EQ(93iOy8QI63c0J0yHRpCO76zU-59x>Aa@f)HIk})sNvso_*N(iSX!f#+0$CF zSPr8I>}pC{MZP;Gwu;oQN`*6FFlLr76;p*W7@VM}Jcg<&8&+8aD`ZZ;dGvCjlk4OX zGpCyo)#B3P1WV>e@X2&9xVz^uN&C#v5UZHqB%8`9702L87Pcg%A>F8yOC6-rP=j%S z5w^5&+qIU4io7-B23jv>?tA0I#C4Dsj3)J@Sp0$s6)+jrv%$oy7I7gx4`v!JZK}^N zl=T|MT_}ncv%s14snGI&U=1ilwm`TanIV+P_rVC7Nm_5f9_aoeI&E8fAwM3Q&7VD@ zv$vN^xW;a{vaLWIrlD^z6IOKQtJiovCT{9oOhM*c_mFVh&fi0@UbrCv$b@`hXKsVG zYXs?DL^U!5REeCHpTO6!zO!|=C>ZnkVhuA_ETqldm}tCELc=a+^x!rDHCw(+4P%u- z_G=cRTbMhRxdX9-X5SW5+N(P`kQv28QCl0y!vX#D&%X)KMb$L^y{8JZsOo%*Tfnyy z1)~7SMD-*4nQXeI_-}b*i`N7Pn4^DkMQz=tQmPNvNQX?Jm99{+iOp+N=eAJ0J2M=) zPi7GOX5$soY<Y#@v=0q`EGbjoPrCVqYsdPCgxs_WLX6mcDqC zfLP9KU41`5%neg#bhreAgB&7qIh>t?;iPllP{e&`cnpy|0B`4^eq~`7O*-jzp`(G>kFY1}kw`&xzbwhN_#K6ov1Y9%+VkW-dlFFpE|ky}j@4 z@cVUTg3p70GZDZBi@FA{#dI)kD;ub?IyUHrf1T``GVi$S9TRjolWINxF(Hcp%{}usGs`5}K`a(a8DBkM5LfsHF4Uz^5)qb1Q zltofjKG0E7hltzuULDV@w49x^4*(c%8hefsK1jA?fYHb}lUWC>Y||4=@Nk{0WU=g% zJVy&vfTrv+*$+M`&vBN1P;muO%=AGseqb-pcGJ9KjC&tf!f8$DA5}wAgok%SvGjTNEA*+4Lfhj)O-~i|%QT+-7g{JD4K33t zSt)05$dm1|1EEOA*&X@k1^{-HKIc6tV1S)PKOCd>X3yi?rrzpVE6*zcKeDeYFZB=P zj3zr?7iG3ByNp9&^q~WJ_DWYQesU4#F9|FJNkz46A#VNu@=YXt8?u|3Z1<6!+)>)6 zqRACtO2yeb1ek&~3_EVRM2|C5yv;sG(hYr){p2op_l@{&1UQ1fGBjg7wG{qTHOtIXja;3Q`xoZ1sM((5Lj@2dxU;Q9AK7O_$es)&wuH4Ua zCs>M>`$b$N7Hg>NnC;iR`Ulpb#a{bzDbW-rF4~-wC?OMx&@e4!zHJqX@KssJ zLA!Y(0M6bfkAJ`);8~oXyGwE0CAvekyH;=}ShG_vudv;(QY2Dac{==zxEG=Wac6)$ zf_}ab!@4N0B01c&SAo_7hnHGL@VQmRY;#@+L9=31;^Zl_gZ{2elpJ6YO*&*m-~W?W zRp7j3PG><^vRgaa?zg>Ak*;g49s6*tP^Oi_+i#ZD$-gsGmG~;{@a`BoOcu0O9gp-) zhS(x?w7q${L+MmNT71ncWu2`b_L?3+H%z<-p>gPtw6~d{Gl#AR5nI$|+u1Me_HAHq zb~W^A=}@c6RVe>tkrD@sa6ZB@=L);?g?7V>0I_zo+u}`ri;J?@v@-5T<~C#_j0QMLu_+? zd+iEYPA1esz|(iA#cDd43Z5Xw;yFzZa0RlQUEIl)zumjzS{=@&#Z*V82@Q>N6qUGn zRO%8>f%#_!_BZH)b|hH0LPn40k8~?oxMJ+%X|qQP-!47NjWo;M5Ca42fMsFde!$pM zVrY|9ppbZ~XQRMYsAYb^^NZ{Uwd$t;)kObhwTZ)GL+Y7{^}`CsQe*URuI)^4{$2#2 zbmg>pw#0y+1CIa z&|j;QZxJ85AbV$0KlPy(bTyyNCBUI^@Q09(%_k~wOL0FuAsv3Qt&6XP5Txt6SSK$( zFW(K$amm38t&sM4yxTnf6_<2Sht52yQlf%RDwrND=;}%l#u@6?o`@}T1mb}jF)$5& zrqlJsl`NTFm)>v$aa=m$*FEg_yEj$2%ZpaBzU;@*q&eD$@w4S(D0GeZxDB2Tsj|>$ z-p%((FjSatMsP8OKk{l};esR_#V33%t(z6rA62&)6klkq%)wrUIQ0ncU+*{yw_Tp> zw#)2KVTtnl57W0^JDmL%&sC#kCq8$EZ@lg z&Csw`nJMqed%V%nY^7?=;&>qs{b-#$=}Fa6hY=RKyw$(bnslW~9E}hfmT>*JB9iuF zily3~!~NXE9!nXMKOx`^+>x{bEt_X9(mc!!gWb5_bi-1)r_4`mQWDw@gyGKT@wJt$6)-uF8Ee(Z0$6g48S zW+xW*(qDDAXDW|+(ec>X>|VjgVxqsAf%tU*NvnZm%0Sb>E9kik_?2h|ihiKO)^kW{ z@A$+0jJIPn_{ZEOhGy!wj?Z%ZY6KYF@l@{iN($QNbA|@tD zZBHwe-NMC?wt+7>6baWTd}0bmEz%Yd)sy?DVU6%w=O-S}ffg*}gyFoN>At)q!ORha zLzJ)46)MvuS_vw!jJ_WY7;pMAmJ74KEO$APIT=n&&Yolpa?%|8#R@L{1QzCZUM%l6 zgI_0rDBQk<{_m58&<9%Y4`6j{ zO70^j?zIOSrIHg7kcN{YEF*VLy#MC;sUGr^c)oPe^s(fpj$Y)avy<`&QXEv$*e+O< zt`o>kFRASGmWfA2L1g$RJ3HQOvQ}__sG-58KXkwH zL-)fEwITnsN<7FGSy8yTL{dlCTp{C);t+3ZI_F84HLfhrN z>;iHXvd*=7h5TueKkMbsM)?CPKBT%s{_K-K;&;){U)g5j+gruqC2W>4lHmq6sR8E< zvq|OPcg>w-bdsJ9x?kkoB)?Ssqki~B-6%sbi`}p5U_+Gd%I0KFu!Mjp(xHZu{^PqQ z-E}E|_)xrAt=CM%3dcV1Z86hE!*1om*LcmWle=i}axNBuRi>?NI#hqA=$E91P*)p? z<-l~GE@?q=(=e}N<(3{yr!RG9yi~L+b%wBpQ70d!qmdHTB}=$E*ik#SyI{X?PzcZ@*>Q^^^8<}}o~Pv<6C7El4FqY(?-P*nW659Ib3-6fn??tJ%+#irb8xu3a5 zxuNckm$MyAlknwU@JH)63g=I&%n|GHSpp?&%vu12v)tcBMY34*85`qpeu~2Ra$s1& zy(pY7P0}-~Kb3cV>6`6$s&AJ1Kn>HRRaF^%v$T%Bc?B1%Z`NC*Z!XuT>xRq4er5E{ z`Xt&ij~AxScwHs+%~H1+k!`wI-yGbni^q1$d|Ie)&Mu`6Gc!5d_r=rzd}XEEkMip{ zJ5!79$i4#lSw-|R^N9V;K(xF5vKXRo)=$dQ+jk64qmMT5bbU}&q0zYLQQn+K`NxK* zY5HyS(F&sMGg#8HF98UMbc~p8QKo}k29TuqTDe^mJ_!|c@`G%hXq&&!A1!aH&dRfO z@@Fr9oOW9FheCaH<4YL+F;Sy;Ufz*X_e0?TNg@f|yiW|w(K!dzk8RivH8&H?@Vx0) zIHMeYIz$wSB^>|Hsxli8>Sb^npP=zc2hV6(in3j-F0KHrvb+iIRq>(u;rh?u5(L{) zK+pZ~eZn1aG0(t7iUA(9tT8|}`O&Oxlzd2_{s(&52NejW3nrU@7cESj|P zP^RCjsmfn3`FHI(nc=RcIT}sqOHv^YYcKk3Z=CLjgND#%wS>2~-h3Wy{*=+t=Cg0f z=m@t$!Wb~fw0RWrtYej$C6PwI*HV?+m%t(^4idJ5B7f%We8#*jz*&S4NwoTgh3F^B z(&48%ddrVRIw@hs-Ps>slaH;3wX<;NY4Qr*B72#%Z}=|yDAg0Ee;hI=^S+N#V-LkA z^QsSV^W%TK5V`q~cl%Qyht#HO(frB0_iEs+=%M@9Uo48x zUr;$G^S;^G?hd^tl9NO4$>+f=9>AmZKslUFX=lQrwLNhjuYS+=@urW!;*Unf$%udAu%u)1Alb;y2^-c&B!n@J)Lj?~C}eicf31JCAoq{aFcm6Ar~uWN0VB znSSL{%Q|xdG<%*&F*ZE02Hlo5n~|EC$JBN%t66{OpPuV&08|+NN+b%Pnd2w5|*|^bNY3UzPGT#N#D@^j{l+Q z_E_q*mC|IGq0Y93vyo$DyS9p8cZ7yL_a+nFP?o#O7V+C&KTa`Y?8D(E89MszaA=Ew zD>|X1r1GHmUXQbozX#$h;W%N^Ift?^kD z1CQhOUqElwKD0~iLwI3p7{E4>k0kw<#>?ZdB*2POfbA-jkFXE@Y4d;im1gz`3OLij zL&c#7HU2*xjE(I>7%Q>oWiX`l^TX=}qf^nx`w3S2bq}PWZ+Cu0ysd+|E2f6mwvEIF7M&8U<1vvm=hF}uCrfYe@Ja0_N4)v+c z4ljDzBE81LpbXs?WD$9~M+mi?NHs~&GZv_c^@~GE^7IRhXiFw|LD+aFR%e1|BoL8Y zq_t5k-Y4iAF9Ll;q&5)?w+-Z{Qn)zV!fS#|q>$TYQ^?I3nF!RkshiHNj&5*)`X*fy z>rwINsN&DjVta$&4?KY}EWUwZ@u=cXA^!cT?Tc*FFbDN#$M!@_5R!I*NEkhzJvdc@ z3UF>~coljK?vzXo$FCmX3!wj37wO^#bwYs5e{pN>n zIlc1WtptLAdo^sQ!9eku!(pzba@(>!xevi#TyMzlB|ky?6_{n8dr+5Wetr{u09}NR zr^6D5oa<}O``jv3hSbji??8m34JV-=Uk~7+9Jz6ec!Zx2XiLh(-3Va?Xe&l%NnLr5 z3UxTv2aja}(j9$j13IB}*wCV!*zYb)_j^8tU*JP%9-lu78Xf1Y7RF#kH1q^XTDKWy zwS>)kD?kg{A9}gFz3Nc=K$F~IN_BLL=zUYsL;{rFI8LL{yqS-5-}}&u-CJ$y4iY}Z z`TJh+u9JKZx0dd~;(eSX@A$3X*mcs9#nqyOUYm-RwJrukae4f-_qKSWOZUjldT(^i zo^rX{D0dZdM?&M8J!9mqL++~NZlB!Emb*^5yV^Bcvu81_mgCgA>|fKt+?I6Z^XRe} zUaIcyS<#3S#F{yJZ;FNF-8MznPhm&PxpqASsx&RwOP7JQZg z=WJ1?P;_SW$$QI5u+gu)Hp(2S9lfWTAinDEw(7>G`=<`?A%%v+M^@%_HBWTn&pzl0 zXm!nFuwaA4o1ipBycZ!w%U2CrQYTfBF#~&`q}$MJ8^nb@)&jfs*m{8zpiJ)_BhNO< zvsQUlCC_HdvkrMizQ*fn_FgRy7Z3)w2zf=>vEbQKF zv~LFmZR#&fU`+Ms*Qy(TGca}d$#^`(7r{i2H~_x}n=kn^-Wa%Kkw3b#y8D4t-J^cL zgDJRIvTCFcOpyBha0&iR*R%C5>EH@gU4laR`rTajaoxvtKiBuhJ z=RPNx)k9?@I@xe;OLjj+APry0Dra^R7le)xn=B)hoyBXdI(u_`_oevm41_=P_5u|H zx8;1-=at(x0Q6q?S@CVuZ`j1L7ojzxC%IGk6Avecv!VQQW3oV)pkFy%34Q+7e(m#h zKg^ReQzV*nhrSxW)|A-UrlUH%L(0$H?h5^lDU?-f?%@Ap3O#HJwYowJO%;F51;F&D zEyv~JM}DQOqKWe7qx?~PE|z~Mr0~#SQ6loDV1})tvrXF^*8Pa|X#CH2N#%n#^Dq^3 znwCxe+jRKX@P9QU$2g}VGIPnEA8OA0ooMiti>y*TQ!dWEe?4XJjCc!Bvmv@OIN%x7 zGXln8wlWUR3C*}n_`;7)(i3&anw)(ALkFn7BH_vel9p9jV+KE$a#C@LCqmP zpI>v>RKkPwA*nQdSSwSX%F0KVZK61Fp&hq)^35Rj^ZA2z$un#W9gDmj4--i?uS1N$ z(PsgN&vw@D95AfLN>e`KCyR)tQmN=64Q~qSOA2#3(JgSba?9Ut@Rq0%0@sG%p z#%Clkjidj5a6rDSc>w>S`85ynm)4@|`$?9WXKD60nfxUSQ=`eqQ}ZCBNIxJ)XvF&~ zy_8Xu%LwMn$aFk1IvtM;Wxfnb$HQ3WGbR~NE8}UiKknM!b6Y6rrD8F z@k{1j3Ys_%Z`wiPCP+MWpld8aF}u^jeWFLH?_`HR;N5`i+tFSvn>k4rXj_Gi(jyw0EW>nsn+l*-oY5~XfyAT0UyK}&9q zYw@YZq&p*_XMGncm1VCB`;?zwaz3!Qz>LJDs(cQ5pad+k)u-K zTqd8mPAJdo$9cEi!;9#8&KSPzs2a-^XdmW@q;LX2RY-GPDb7QwNQDdea=|tT;sSzH zq8q{Zqr&gBg7I%a5^td@^bwlJDUlCbNUYxv-S)UgwH}|uPQkcc@#FeO**B?KDEiU-3x32eh9_Sj!x3vw%<>weV=6cg#E5)%jiGOf)EIcP-w=+V4T6+(gcB%c zFA?)guW!CzpqI-2RH~4;6=(X`tF`ykSDEvvHv6Kh5YClTaYD|~aEZOz5fp@QvoT%3 zgvI;YU+|;n*)p{o#ByTnMyJSX5xddNoG?{%P|!x}_-FA&HoM_&;rDh}&~5ZV4hv#m z+)Pm+Z<1zoo+y87k-d94FDQ2MD@UtiQpS*2SJo3SNeIr@p&lkip zaAiU`$bO1f$}H8k`e7l1WR8K^&Cwgl8P|ERld(d8Tg@+6Nd^*+~_RxpKXFd&0(6e_unL88bJ@r1Be-%$A7}?ik_I?UQp1u~(=LF`HwdE!g zAl>vQSYML_wcPv^udnMxr8z3k(aQRgwUrJ>ajx34J=WLpvQy(UYZaU*9y-(ta`CkC zrK~T4R^_mRczq$x#7A&R-04*nIPl00uWHp=*4MbgBe?opUpxK?>&wmu1~EBL4XxSD z%7K&#z*6m{Bju_DPZmc^@MiSBQWB@5T}TOGZ88CebBRi&2iXI@YG{@1IFB#s@VsL! zn%n8ltnk|3$OOqey2)9f#BcMli653VOZHJjoO8@>kUNResmrM)@ zdcL7gDwsc?MbE3je!`ZM2_7JY2#K5Z#1>p><(M)QMc` zN>}>*c6Osf(9A{c&GigjT5ebInAxZ3CV7ZwfiWl8Q*7|@beap{*jr4T1F$OR+Eh2*dH?r6h~(YM9$YhvXHn)S$SZw>{l1JxvLNm}QM87k$vADYY+zh%aXW4O`~A?Q zSeDdeLksXNFkZ1@rfu9-mZ^Me**)3&@&j*g9!DDnmSecHu#|_uQl2=kT*fegpLtk5 zDPXrbTe5rghlS;qa{bO2vvDdL&QDGDGl=RLhP-Ajt3Vhr5XbV*?=_z7W;`!3o^AQY z+neW5xf#!F?(BHvA>)xJiSf+iXMQ|FbmH;IfecKBjM#BiCsal>m zb1|SA#m~6v=JQN#^3c_mohy?NHXB%ICNS~w03_Y^Q!NKD67*{L1^55pr+3aATqi?aiO$ml=@QM(lv( zAp?>pi2+^1PdA{3s{oBWaIIxmnc4-Q?pb?t4Zlq7RovOyYS_R6-)uTS`g^Uu^_HnvNOeB_aFdja2ktSa zm-xXDGpFxsK`rEl&4~4LnNmb7%o>tILcX@OZ)tV+?h|qINR!%O`31D(#X=vG>iY*ZZ6h;O>d3=nr0)3)-9Ho1;%oH5^dSY3ky)wXBYHr;-#f-JAsCj z6#K8;^S_aSid^4{{MY^oTm(`TT+-n=LIXsRTg56d7^R^g(2&g{RL3LZeI%ctHyAGV z(N^)oT~86y+xF%Syfg%5BX{yosvSL(%Cw{b4Kizz%r@8{P^4^6f>-omPFzMm|UJJ^G=` zOMW_tvf80MknzssOZ6c&0Mhrk8v`$S>U7!;ZmQO+Wse~7f%3SP-*V-$pQn=+(M`Qt zA^yW&({<3&?BDQ54d3~M zJX9z@uY74Zw2xSGmSu_HY@lf({9w~?{k3I3opj4PT)^_yy!EVeNmYl^S6!J37TOs7 zko}~5K*v565fG)=htuH&Kob6jaM6ov%a;xz1)5Sc$pKxR* z?d9XT+s7VKBk=_oiJhk*t|)jKI(r9}=TbQ|u*T)hY?q{_Z`g#UVj(tR?tb(`J^h2C zw+p{3*9v$N0}ZdrCyMsr35~Cl zKjq(m6+UmBRAQ$eKMzS9cjph`|1x#2swE*EO*;NNq7A&@I4&k$0$M}t19_7*UUms& zKZ&|=P^l@VWd{7*m5HXXKSmXTY~cxhG_DPvMpmD#AyPC9YW8%&WXM5E%T{O4QFc^^ zM!1CSYvbz!yf2?sCe&(8hYTT_^yEFN$~^oJ`NaZXig{6Ng|&Gen0ymy#8*D@?)b6D zvSE+)Ak@_y{4UH%3Wwn;5bvTbWrPxb4;k8 z=T3L{mg-4mmTqBTs%iN2YSe zvM^pnJ4|W`i#DD*b|sQYbb%lVudd!!()b=LsZbxK{#}RFzw0nY7|9>e?#|;A|E~Os z!oTaVtlpyU|Mcq%^(y%zQgu5_=7?R=p;(@e*AxC-D3$z(qsPNd2AkLDmJ&un<}EhY zuD2cnxBXaA^Xux4Fsz;nTJ|-18QdTb^JjZH#9FLU;qtW*JH%#_H^Q6MW~VIJ<5fB zG3l8-Mf}we7}Uqxn^|m6gk-}1i#_o$=0vRRa&ppP{%~(5+SwDoC>14r#T^Mq%l(1;RC2kl&llc z_!s|$*)&K0wxpw*U3^$H=>d5W9D+`ofcn(^mI%72vq|46DsdWtG!}J~D7qY7P)tJ? z@z#(S;)}Nkfq)n;yA$#$6v=*N&U$RdF0e^>8RtEmYDc#z{J|5Ykh`C-0m;8JNtObk z^X@n(PkR!sGy7jedIxi|I2*y{o2u0Xy=QJq- z<)5leCLaOEhuOb@`DH${FEZ5@sn;?AnZrS$( zjqGcR2&#y7e7zOh$H?Rb%`IABlfcPMW#m_hd>~kt6x&x&#LP&0?J8MK?X@j}noeNX zO(1BNVpd?+D%@UfTiPNm*@=a%VWN!N|8UbC?MJ(+*7aq3vnb~6?Y{i&ZhPC_+{N9o z1onJ;34z^=di;$z$@ML;Uqj7E=y3%`V3((P$uAy)RW z`%>!6zK#^^!rtu4`L7AW2_!%e?gatdX(8rhy=aR}q;>?#7em^qJq)?XBc8FSn126& zAusA-@48XRX|xe|8!>miLVk@(d0{iq^HGds>C~y8+ zUu^ywf{lTtWC)~K!N}%fe#NrwdhK+3?N_CG77lx@Xq3K+GP%XkG(rwAr`D1ieiowP ztnzv}QrK972T^vd+a}s;n@lYdxhAzVQOgP^qf*1FK5AIyYJgu~%h>Sws;F+fg!A2= z!6uguKQ~H5M;V5Sj*|7Nl^^ZR-{G&cWd)*hUK4#`H2we=yd)<6+vWL_+$o9IQCaFd zJdfh^7xc~Ycd+dxjmy>^!3FOu+LWRNi83fj#cQcp#ipk>Sbjjh3+Jpo(tR&-&c5y1 zyj&Ely*5ZSm$_=bo~*{Nt66&_9W7>%`OIG8;oo$+Q6B7O3?%8h^CzeP3X+QAPNexF z2A(9V_1hxH0!gvIAZA(Rc8;iTn`kfLaK!G!UY9$)#nITFF)d3`?VE&m$H=dTSr{$8 zcnak6>z$V5&rN;^qe-Dfq#g;sx4Cj?KsqaWkkw1MLD9j+DD&;zDLzQ}GP)3#w*<53 zWd4|roZ?#Y07?_rvdFtmv84Xo{5g~^yrs&-w;WOV=Ll?ZK|U>wk0Q`i*o5pa0+tRNw=`;1^c2&kNhuTec3+7-_IS?SiVz~J_(lBVr>GYKfF~@ zdN7whQCe!dh1#^5_HWyg90;UY^RTId*M2lF#%s~Hm`ruDiaC)U^cK9%sU1FX;1CRw z`e=+3DiCau?-;3A1J&z7IW5UFBGu$B=o`P|GVdrK%8%axzHjUW-+Rf25_`wG9)R~R z$T3IcWS7C1$R9$Nyw#tT-{5_a^X^oOa31F+om?T#3nNKH3Go#@!@17uiS9MXgCYg? zkw2~nzH1t}LU|uKPW5SWt)Q!N9b>Om_Bz{MWoYtV=n&VbE94J;4MV1`mp>cjPpkat zkU#t6PbYth^=TsS<8#Upx)R8R&v%lZB<1}a`=%-pJMZ?Z1eftas6Yl za_(APO_y;ABiX#zrC#`!T`;6akwzX!vu!l6S;CavG%#KrPDlCx;3Jz0a zjjK^MC;K>Du!@XPPrE<|3|ZCqOIM>h|2S}H+{OW&=WfHzd%%C*bD5l^5J{8b3~m>L z_&kY!Sh~=YyEXO@dk-hOTb@AaOGB&Di%?^W)i*kZ!mNK(D9qr(`2S;z8@~y|p`LJ! ztntE+PBkCB-+Z*zebjAXrV*EXTKx-%Nl6Yb6@4-@xK{J|aXgpIdap2SMJ)*h`?*|V z7?ym~_9_8Gzb?J%NUHKdFA8N-vI3^KvVI0td+jI(QCT?8c0poyA?!1gI zbRQLtTtHcnuX3mL8got;OU>y!;$%}U{=Dp&FjPAgrgF}RQ$X&!lzL>izHaZuy}c--uCdh9#dC>`m_Oi~?Qz$!tb>jiQe0eXun-?Xn`o0G zQBZhFk55`eh+*FUc1Ez^NSB$@xL-3&zoy0g+VL|B@N6}lx0>P||0zji#Phkg;Hs=- zY?Em%;MQ0fFMd@A{=8h`Sv~g~J!dtnS%vFav~<~3CIdLPS!5R? z0x4xlo`9)+>0>Wu+z0<&$Nf9G#N)mQhSPo`6hSxrPbG}Nos$Wdi9gk;-*a28ND|yOFzJHzMYx@T*f4K{K%oRLpc1O_pyTZ%^V7a9y>jAgz$-1=ydX#&-iKPh6jInaa(CnA=%T4m$NfT5%yuEou zzFN6;NJU+;kHvN6Wf~9JT3*G~tlTcrTS7q1jZ;~4NA40KG`ivB6+YS7njQ)PSu*Lw zz|0+QzTuhdi#jY-v`wdOCf$rv6>ayk-{)|Ie09XT{w6MaG^ zGG5q$?X?qWlx9YNjtAjhq_OR@UNKMK4|)9)xhQ4^Dt{jAJX;LP(j zf6x_|`;9LVsdZG`!rTOg^Dq~m)G))3X22z&a=X}{u(aO2)#>dmufcv-!o_r*qbyn# z+W|RuX0SQhswOj`E{9msm21C66bYp$|3vjw3yDoFT3Vt@Rr%1q7{%n;ueRkj6!3=y z{sps*gK;VxO5oT6$$|0+HunA!xNlPN)XVu#T9cF!+j)6vGzX<&(C_LWtK~h^@=M7U zL5d}!BvX}7rM=0oWC#u_lcPUJ|2oz7R{yd0urk%=-*9H`BU<(@FjM}WSya@C@X!T2 z2(n8Ym>!MTkM$M4D}&kigz3Sc{WGI$_m`zc?@Et;6LIL45de^bQ3y8Z0FL>zL-Lbo zwGsHHUkjH;bX++mCmeRk425rIo_=Kk8!~nB(Y6A3ffe`-aKtO@`-KC(|BK5?yvEha z@)#|Y;TK|l$7@{4%S`w|;dfvVxy+kI4x|gD9n2!->EJxrh8YEHgVSg^_dbsjxV}p+ z4DsFAdV&hSlipyV_+P7hNnB;?GwhDiET>DaU~g>ojikY7b{ z4z>z{2~lE9(G#f0_>EJ9`LakDcLClwvlDv@vEnY;LFN?(aN4M3v;WT6*~r^yY{66z zVlL!QwaC@~9-+k4AoG>YmKdOBYED`4H0 zT>wRNE2@Gb`c_D!oY&-D$hYpZjM$*E!s}qa7W`PaEx*6?_8Sg|0HJ9WG-zumwL4~;!Y>0G= zGq}@OryjC{yh@BKhvCNiHB*f}`klwOQXX@(C#nXuMoV0)wMPFCuXR)nUeiA_j^HWr z*qK4x_(KGt4y^x>JTPbA7VIynaN@80U?PFzq(|8y`6^!5d=-xnY5gnGRMd1#C@AlT zm$3?GL)I_r;L6&+Y&X~4T=#L^$8|qfcG1f^xps2x;@ahhC^t}0YOabZ;t(WXMIq_d z^_qQ*4c^@SAig`9m2IBAtlR&#RCtO0c05(#`l`ON`ig3e&r$mSE22e3`mm;l9zSV>MxNU(%=G}Bf!T2!Cohy93Esj9mxE`+ zxe)wiIR83|UpkU~^(HhX_Y#g=1?vdqcl{6~l77%I6r!znD7ePs?e5eB-3MwJBj`hL zGCSq00v^psKti~dzG=Vh`L^s|B?x;3-O?8#hy5z?ViYeJZc(GM>e(|s0`WKggfV|G z=W@dta6XEVB7gKYSSh@RV5Rnuhhkzqr)nCcqeLeBba`qtr@B8)&bLzkr@{vDZy<5f zOV3HQ9qFH{d;%uw*+fmX!a+S}IH;3zBU3*&pLBbPGGdHrd!bav!^zct+q0#d&^c}>&67(bfIa%=ZT?+spW%a(SxajtrO zWzaTykN#?W8jHam(Z6`*CEk$9oql^&82~Hs#X8CbZx&4?zr&BJIvb!@-HW~3ej{%V zlNDgciUhryy4X}O^+x@&ed=Pl5(9BH&-eN5Q?IelueQ%;^Sp!S^X&84_IVZ0@&2Cb z+vipG`52yWr6=>QS zJm10pt`%PMdCW^jf`tC6EXUG(DixfZ38um5%qkao^emx%3I8EKycrs~t#iLL2J77L zJCR@^5{HE^y{h`J7AjZje)Ql+=cR)CtAkzDCd*5(aC1%Yx%)XsVkat(udY{>$N$pH z-243~zkH^^d|Y`CJVDzRuHy^m{hJ9JpdZ2~x@FsliGiX6#!VMxS8P4^1BpC89_{)2 z3L|5SImYG0g03e>R@u1h3I=IQq{F4!6n=t;Qd6K*AEPM+L(g^~96dNwXBCEGPA>Nv z|Br^(6nnuBvl+?$Ax_%x)>W@ol@~pdDzU4`y)!zOaD_Q;}~5ECtIj| z!}dq#SSY$cW`lj0fJ}n0XAqF`z$qOGP|;==lk*pFG0l_n0pIS zngFc#?m1w6ohGzv0;K=L5AADS)S_nFtpl?8r1Z!F=@q|Rr)a@0qQu_URc3l~$M?mC za20#MPF^p8<#||%JBO|tq`s_)5L2mNw&4VP3_DQJJZH3pH^|ze2h-pJrm?ox*d7ef z9+>E9S-`z5EC&vmE$xAT<9h;|JSY?nnP3s(a5BC;>``md*K131a@e%1|1A-H@wEn3pzjV?KA(VlDbMfN3Go705TY8BY_j`sy{U5cXD@|;PI zFBSY!dn6gCjp734Gq$pnR6(L##}xIK12qx&-TrZd?TfN~G2Zo(vczHjQVeDj4ChIT z>IBLc_ahU08thAEFX;)1;k3^9*Qdh@0f=x=yL| zGkhoJ>ZxUH5-bacS#^9IQ;J3WNc6Y}r7+G2H{(!B(kXyqZ1;omC>AOdHQA4yarpgo0CKTD6HZh) zkEI4;)oMR_Uu>=yZiB(+ERWq5v6Q8e^#xUT-JmuR@MOw>zAB9dO#6?^O1`kjVU*$H zEJih4bJHTnKZylalbs~2+E3zAXn=LRAnE{WO5&95C7Cne*aTLm*m`>^{KQDp6e%_t zwh#q58Ulc16xv>6Ic=FvVlI``vI+LFr@hp@c6xH?5ure$C+|fDUMkD1b}i_gBtNj* zlK!{pYxD~CmbTA*Fs`<^cehi>^^Qb(|JBYFOQ^=zf!<{{OZYWCOiHNqP_*Zb+vnxg z&apm!l=KK8H&KNMo08?x;>ukW6j5YBK^db&_7j*Ek6q%QdoQs)dol(`_o=j>U`|CM zURCru!6!=B-stfE4fv zis^;>)!jqC<+OBL_3NU%{abOLO;lYptb2-H>!5!>jHq5(v0dWV*8fEdb4yZ z@=I5=^qKH4-1-<&yB~}m{PMqu2hfE(y*q?Emc8sro-~|%(=Z)Md&viQEM(;Y9_I#_ z@f~wv?T>o^A9b;>ny;R#-k88-IawYEqG)tIg$A(-nva1xNtR7C=^s9;Lhv{AG8Yq4 zW}hu$jDAJ(cyIdqVtu#Kayte7+bhwN^8P!i9|(#bY9=L`EQ`u}MaOkV3v(si{x#0vX-{Oj+b|36m!^Zx+#YcFjh0*ZNqzwpm0 zNCAn2twH@Seh>HxYb@r9`BhS93<5=nIKJzh)K@tEiadNV)|Jm<+OFD313ouH#HLaV zV`=dBY_Hg!bTJM2!d%{S(->~Alr|rt&C8@s`J>a|u%}$QvVcCB?!2viDXIVVv9LO; zF_8rcI?Q=qawr3Ji_MXWu*9xV^h%r)2#-BLDz&l!R%z%hq~#aIZ6_2$!d6x06+IZ-AC;%Rk&Z~ z&dra9S!1+@(Zf|d{7ZPkDe#1oQSwcmu=J;y@DkZn1U~Z-U`U(T8@rqenR7{DP`;Gh z4S3J-vn=;MjkhP>z*@a=1%Ssw8Vw3rtc4iYca%xop&!zl?)$uEO;p*qeN=+$(g`k# zM`?U%9=a9cPQ)#Lv(>QUpMc+hAaYfz@^0^r%YkFxR!Pb1DrlY#J_nkQLqkQ{3v)0{ zZlJ|;F2b84-y}I_#^E^UUlz|p4|X{Q@-f+EV=f_1Wvw5{%Bx+EeO*@8<{~42V9ELU z5fgE6Lp@`BOQzo8zN|Z4Vt=hxSMsEC*0EV&)=MkDz=~O1Xie=Z$KnWUVwP8cYi)V$ zs%$x+)+hQW*K96pbtxLloJ-1XR^V_VEBStFJpd$=XMlWLQLFw>pH>SL!KCEh7^3@|$v4rV022LMtQ3M|)V7jaQcmekUwm_!xB7a3nyXZi z!9rfY5=OB>cq4r35Gwo1TgVGu_OfKOlGuJD`(pw9B4Vqr9J=pOSQ3VAp)VAxC-iYJ z&1|+4z+oMODC7qi&u%UQZ(9}o2{{rU4#UTzP0w9~G~bJZC6ZERvsled$=rpB{nihU zn;DMmisuZExG#wAl*Kp|k~MY0(*LlN1hkV0K~OB%$R2#85SAqe=;@1Eke?uqso}Zx=y|bey7#?QR$P&irwrIss01~p!php#Ia(_SAcUw=V`B?p_}9_ev((~`q^u0 zP^0sWiJhgGpG&TfcljqnFD{?W7MnH;5?g7Na0yP;?lp>^j-;}eq+XIC{mySO*YJjE z4#gS!ux3FY8ys$Yp}!Q6BfjGGz^R5EAa_dm3xp*UJCZnISHlarQYo8~?EmvPBmh4a zaYjMH65o;=JNah1`(`IUltF=a6V1@(njjiRI+ejEW!KbUuAj}>%Ho^TPQxa9Jm)2}9;XnyHqIQM3je~U ziQUu^^z;zJw}6P3)k<$*T6jn`tf6I4<=9iIwRTRmnqio0_B)pZ`-mO zl~j}o-Vc{n=y9Vx@b=GR`wr$ z>AoXZx8FQsH*1Lm*b|QzYe=}1{pS)tT*lTD zEZf2Uv)G;2Bd3?V&gmt~WqXST-OUBx+r)man+b_($31HHk_XM{CG0RfjQ1m+y8TEW z+x1+x z9~JA5i+`uXSrr*MnDAd^lsJoLqH5Tj>O*b)>(8wTb~f(oKlWjJextA^^nRRZ_ol*! z44GQ4nAOqn8{MftExTU=KDK5t2!LQbg4}ia852aM?^Pv^{cN%-;^jQ zFrQCm<{0pacl83yf|o$*IKOi1lDimfVm^xHGKH!n$}Etwgd-$`1)cnqn^ z9p362;N@7L6B06*qc6qq9*%ymkMrPvrZ79_nH2)}VLwt3BbnM%;F~G0uZW&~iJ{pYS~R*(fUAab~j~8T;;e@PE+r;ODVql_L;6;@h7Ge+`^SI*25H z7b#3valsTXC#&n-Ybc2%TNHufqht+7=7a!CK}?|SW_fSIYPF0#O~Yw`+G|x$pEjwO zGtnZPXTB}pU<0Tk@r(J!scQCG!iLK=E77#p-aMSPg%pu)Tr|=4wk&@uVXgACU1Ot# zY@tiQVuibTKH0dDPMv2S^uRvYBE3Q1#4*hF$@mvPP98HL!#Xxr=u~tA8L7-YOK!7Y z^d11MS2%5I<)YObYL+LGlKh+U#;e`5QLdy6(hHe2@qH=XiArm&Jc!olB{c9RzMY5U zh?R+P{gnFj-a;^jo`F*$nHSxO`%#$tOUCNz6VRLcmD>dm666^^Dfc1yvq=6-=TGd? zNNj`r(((RLdgJ0SV*Vx85BMuzny2`xU@?d)P}9f`QuX}zk@Nz=B64D|C+cG0A`rt? z1+IR#09TWYwkGMLtN^#!8O#vxU%*9BH zn%V`ZQxiJeMB%%tiZNIUTXc}ZoVIG0Ll_B+CAo6*Jq@RT{hx%%`Kg##+=_tI|JRqBdW_lqy^#M|`O>@e*r9fk z9{**g2wRKj@hCz4B)zuN4i3e1@LhTwll$LqcW`8(7kb?I680oxkAKU_6(*6!H8duY zgp(q;mI-Y|nm`ya5=gApNC%^Pc#;~^xGPGfT3d)=wmPUqACVqeUL9mcRJYeknrhB@ z{@zZ0kE{-FrNHu0e%%4fa*!jU3M(eyXmvf|tYTNN2&9r_Z~+-Y`8HXS6Itx7RT4 zeg_dm-cZ;2ew-RO6y+D6%hM5W_~9q0f>HK6z!~+g`(gSGe$xoA1HGqcH0UB;ypHfA z?JcA*)ui7nLp3x3?M^#Va@(@C8L|M04&=@sYPTCsTr^~dw_so!rGTo5wva$jx(xgF^DL*kr>`s-GzYM9{n zBWc7$juWrhEx#$q@0zE$zZ6L0r_FPp<1Mt=Xb_BJ{T}K5aJs+kxOC+`%f6N?m6yN* z%$duqA0V!i>B5;j(9`gIlXeo*_6lEppfYRyVEKAB-i^?ZIPr~&(cbrvzeP0v-;9Zk z$a>%yeM>653T&H#7z?(EdHPd)vvGP@+U19lEDCJp7=;Q_N+i5#=)3c#asC8(e;S4` zdwMWJJP6{B;0dxU%$=-i0JrzC@8^Q7fZ7k2Z!{cU@RgYF!OyAF_%0Al1dr8D;tGK_9BCd+N&ok|6YKRU;zBeu zcCxvZH1~(!N>}b%b{+ZoP{=&Ne~z55+*1!CU24FJ%MBhx>fzNei+En#UiZdt)ETD= zrE6}W?E*0|M4Db#o{FxhQ2o#$H#>7)j>AKeXVW=bs<=^RlEp?b9H1>I`_Yhm* z-vuhmzcV=?BIAAU$k@llMQJuNq%glJP6fE*?YI8-9KS!cZBNWa?h4e}64a zxIQ1%K98d*y7@c@rZdy&xSOwfcN`M>-1c1mn75YXozF=ZiB$L*FChdi$LJ!BA=HUn zO8?g4(y-q4PY>Rtiz}py(y0PKc6zJ-FO_FVflI%n#Y+*kO@1Z|LpoPi)H&NT+%?bB zo@pDlb3oumdI5x1Fc;+85_oubMzqczI6DKzE@-6JH@g1Q|2*yqf+?Y7KpZSo6M$_oc5ucn?5$X+R(u`%)p+#_1adp&PHB#LvWedjls0Fs5 zD$O}EV-FqL)}PcFyYuiss*wRtJcwFZv#_AuH()XP{J&Loetti*sySGw z&{uHP94yr6E7WQZ7O3<&GE+N;H*S3MqCiwE5@70 z6Z&lF4@#BNr}F)goClSUS$o9NUix2Do+@hg%Je=})c?IQ%TE>ce=oCM^Hf3qx6%Lm zmVG-1Z;;O+2T5lK^+~?UTiHUVihzPq8tyKrkyfF`<7{@Q{Q2x<0~_*E$tMW0FnR}gICld@lK4j z5fuU={J+0v?S0Nkh?LHMX8xV`FCTKwI(x0X?(134{pnr!dgU9USbmd^4C;)RSSI)egaLhV?WPd~dDc73*_(3^Vb7%>E z$G}%N-#X2YwfZr9>g+$|wu!z;GKiZjO=w)OrP13mN9z)BpfZ^`P8IODMKBuy0lHZ; zQMrBD&73pjuB!)E-jT=*fuXcB(fYd!6S1AC^zRc5FCW5@&!B~$PBa{j$uzSd;Z1|% zblwBKI@Jv?p}e|@b^<{=_J_W#UN9`B2~M-<&l20;!B5$K%}=8B#lmD+H{1tTYOSV4 zX5sX0DJo}6>6f3WtH-R#6(Bld-X^pIlGR^|=yge(nJdXEbe(1<8dAUHek%4GZYd@* z%1=lp8g9e?#*)<}IYluEBUhurad9!$Z(dmn+_J8PnQ1r1Pk?8wbXAABj}6CD1s=>C zLfbHxJNQPDldkGiC}RZ%&n(~sem0)UcqxPjsm%M?GDv3yS7&3Gj59IhH8T|N8=(kl z`X%&(+aGatylQpWM1)vn7Ol-2y;JSUN4&E6S>&T$wMFyc{O=GS+giW`ftAr_aF<}T zO+pOV!S~F?qZv#Sb9)|`T?1sO)ShQoJ?Jf;4<+93KJhc26mgT8n&PB)@0^ZQ?2Tlm%+L6xU`d;G zoh>Qjtz^b8agsOeK{5qUQrUd8pB!i0vk;aOk z18BWI(fV8wzIbucxSpR+(D?Ath@L;Yo5m4P$A=&^teMiIu1L|`WpX0P!KjwR;SJ2! zlT(7>C!}JJObLeUp!aJ-ekjJy@!=b(^zvRReTqt-BqZ2yEXhtjDQtzvjDUYw1bF|h zduZN8UfGa+M0`dQa{ZuG`R}!$-m>8w2bOhps{BPSNV9pu`m_7-QjLEm<9{WYIla$* zOuWl}+?~H4M_HlkwIBW9Qtihp{q#(MsXlx1+;C66r6~(8HQkyPmLz+hAWO0RIg$N& zQ0txuCcFK)zV3OAN`vq-GuLzTpwOC1 z1=9vIzIG;gcPf}Xh;$3ly;y~360I+>LAe&OL-6kH?YBR)Ur%8Ve$MSzZOPO4IW@Oo z!S`xDm)o#X&p63#*iCHMJ+@(gk;N}K$-{;`g0x!;(Rix~5>WOZEdEM6MjjXXv39?q z^AHNGiSh>%-c*8pvfB;|{IJ4REts8FHG7RqK*93hVYdFh@D2ZOrri%q5-*?_Y87eT z?OQxhzU7%Q)n6@CMElY=w?;L;dg<){b13f(r)02e$d|WudaHOWA=-J zdg}6~wZlRrOavX(vx36tSuxKDYNlr;(X)7d+hNC&89?!L4kKU~jK^DMv|2E+9@6GQ zCg*&ZScCbopAZB4D_H%t`tZG}t-_k{>bmItim%YRpTb=i2tjLjwpY#~lIf0Q88_Io zMPQlxVE*yKr_rbWi^KkR{e5r4(eswSp!o>=!QtzlA-i}mOK}jIkFjm)5~NFIPJ$no zC~r-8saBb{VPQq`0eoqVCia84sKJzaTgs@%lhothq8^>?=!V!czMQY;S<@%pn1jW8G6rjRc_7UsXXJCZAzri!^17^<=ffto9uZRwkV2S zTciO6cj~p)=ZnDad^v#J_eR$etBHMPo%@X2YX`ZxQ)M0A@_*4}1~(kG$@K2s%6y^7 zl}xupQ^pI3!FpVO6&-e&yjWRd%ipEuzo$F zFMo)|d`NyO#mg*z=+?`_aqpK0Ts#qPQy^A16&&yhjoi#kjr9obT<0Jio3z*UoE{In zmc6WH8w5d@uIWViTVCURN_h9agDbkh{^G+i>P)7$E&OxA^$`Ur&cz3KTu^V1ZyS+V zyuXrlzQ00??ImANr61{rS+WhZdhnDWc^#txzPl;&%eOJ0ZCu$!3s1}KifG~)ayLw| z&9!5-iY#ybFtd-|ZI~yaLNp=|24v+CP+E}ocmuujN$-bzRMO+R+H1WfuP{>mNKN{p zx8(Qk$K<(Rt@9d3vq*~%eDSMu6JF!FO7H(_?cA?;jUOakDP4VZ358BdD3<5US&1v0T)X;hSr1ZnBue^U!`jOV|A&Z|s z47a9o@pFg0f`Y^A4{xaCqt&~2%OvmKNBG;0)kCe<&^t&UvAQ!RrBCaAe^ol(J#13? z{RW`3_eEvHe$V@6sk(W%wTkPy@k;=zuG4HhbH7^q#k#8&@4uQ6*Ph&6z4*WlSIw=h zo4$B|?cDhvsPoqX4(rEk_V0Y!`yn5#`$x1sdt%xfvw1CJt@rQTrN_Hk_s8}4q}aoY z*;l=1SEl1#KWD@=%?Xgj!n@AUyrw^e`MGUKG&f&mZoV)F!S?zuI6r-6PYUT)!j?%o z=P{|w3CVP-*C~v24luN;F%KIRI%ac16UPT6*rfEF7t*QS>6x##?vDS0)#d!1x|JhB zY?b``{jNzvJMpwA9$U-a3mPcr-FYp={HqIZ2ZuS_*>=3tRk~*ItnK&`B@;>>SHNeN zA`G=1FL>DX7nZcLrIs9_r;4!EcHEUpo=j4`=d0_uFwI8oIuLGYYUz3{OjAwQbEMmj ztJkYfSh7XQ2XjwbEm^>4*U#KjC4cOms+DG!)N3nT0VVHpPxzOqYLzgF@%?)8E$iM_(v`X~34>boQX3YY4yb7hyhqz1Ss zTeiE-z21EtFYs>nT=!!49M?kkOul)gI~6{!3ZGw~0V(6WaHhIHrbG!(KBxqf)O|W- znZvL^<-f(U_z|Eu?lstnSiWsa*HUr=|vO7gGuBPX_g_{7TAk`t5TQ@wRu z+8ayeIQav*wRiB=Mo!ST!td{g-*dxna6-4!leLv9?*n7=_QC!QY4Z8^hlO{wDKx3-h7B zX{5z6xPrfH`1=}vVkX?i-<|w5@%LT+qBeg>I+8c#%af#!1zW4paWVpF?7+X@%@+*1 zPQKtL!sysx5AM5?TKx0@gsxJ{!1}*5#DvjJ_J#0ga2J)f5Twb>EuhQ_4UM zUDs z-ilT*P;dD`U^fIctFTU#5y^OQYjL3R^wuib$EpRku=}>NSmRWz92`9fa_&k5KD?zs z+$~Kvr82g{$nM=Z(~TXf&$}0PEhuSvT?s`K`{1p1`1?ALa6@sl8N%Pz)~i~|z^2!& zaqpx`gtk+EDLLZzAb&QUJ*ubK#e?*I#4&#!AKgzdVw{1E$=mkO*p$CiW_^_`Xz zZ7!BJ>TD2vMf-US1bY_$f?GF2?_>g7=wJv78R)Pj%U_304ZhB>BhIuP1F?n%heC@L zIuUe?uE0D`qg+576Thu+l-3&$(h!{OGK5B=r=Gg~hhfvZ`!#D5V|6 zH0{uQJLzl^vNmJq)?4-|_t>^jtWkZVOAaJO8^&AquYgJa-^tUzv#G@n=LdH97sM(G z3g(|ih|&hr)`cRUlrPva?NmQ17-=+T&X_+0I3c}WH@5L}I_l2xgSk8MXd0K}bWbha zwHd~TrQFZ+ozN-E)jm7%fsKj92dzhas}K3~{rEe5_$7#n*RU%%GOQ!`EVl50h^9cohNaCm;akyK?c9Y`6GY8@;lNJG`=~oqjMe2K2e8cxq5M!q1$q7TYL9nKsJwcx8~D8|d05l*FE_ z`UQ#Kq4Esi5X?s_czK!}EvWcUPv{D>W7LJ{e4p z_oe3;|E)+XTCzhvBOEfDH5{$RIVfbTGRTV)!FhXf_+18rL&lek@xuA)xO$u&QT}7F zI~zoa2GN#^9Yg~khUqqEpTlSdrSN_@zHW^de4F)7X5c-39^UO7gk+UKkE$jUFHb{X z4uYv3_cJ>gulB`iX18<9UbYd6QJYO3;Cl(KXZfEw&p08ZS0-T2U@5?5!c3%7?GdvQ zxO@{+X!JZn1-NPKi5FD0ctkh^@J*kA z{fJ)Amb#ab3Y<^C%SBD_Dh_+MudtrtwW4fu0-kLGBqXzFDKpo`bhZHL)q`a05SfGY zG!=ZjB^7&zpV}I@!g?YV4Cl!KFpaIr!8kS=4D4a(Q-e{RD1k-xOj9z2s2xulwVTBG zO7u+0Ou7K^$fQxdXn}pkeAUEu5zxKFIHeE4$%oC^UhEHEv=Ux#2Ro}d(E!`Cp=xch zRzng%uTi*R9-PRof1mRVEH33tuT3Zb>C9%Z7>z2CeuG6sGo>ZsgC%1ec_*2JG1c($ zL9U_>_$QorZ`n`mtlNtC8E!YceZixIxxEzGilz|<>K*QAbF2$5^MjFGd1zz6hBL48 zkD^UOJOljM&)8m!assM&6UUKNk71MUQvJ)`rzv3>A5xQPIN5Se)v#!_0|4k_*Ior9 zm&IS2NWYHE;5T?A^BcBkML;UM{f4btD?D~~`3;)~lf+82uIZA@gl&oR1XKrxBZr)^ zp_l}2{%356W9+*PHTXn2xnTqWs~zwFYN4N)cKf5*FT-K^OfKQ!Po;t(zh#rOB!l6* zQo%^16pQL{hqI5>&h>vvX5skWDd~mxx05>GQXNw=6Uy~y2R%7oiB6u3SAt#Pp0Fzx zmKW<0yJF$_q$b=Cw;wie>!G?I`>`JOd2=!|huc^2mY5b8{a7IsvK!X;v8|fk*p@`B zJyHISx9sP-&d{ua4L5$#S}&Lksuy0aaCZ@L*=pisnbTE|sEtEymnK}m&Bmqcgip*$ zI8k28OYGr>XEiK1?Il6&Db#-7bZw=e_AaHXNrQF`0@cwCo(L{s3mKBp+BN8KYa*CW zsX7Gy$gf@^t8Qt7;b;{Uo*FDHi4&cI7slDo*(DW{TLBGzqur%VlnRnN;yLh8wK@^N zB6m>~lfez_s0yHnjcTC%^g&^*3U|hZB$&+c`>l7!Uuu^%ELvKSeY9k%?R68`tY^Z6 zbD<9#LrTSjJERsa9k;d(IGEsx6`h$=4=eU2b+)*L$<*v z&Ng+&^ENc??{%65)+ZDKKZG}DCsF$#G&e>R#QQmckXt?8FtB@cXBt`o6>TNRMCzX9 zZJ}~Q=HFo8t85oiO2llaVmbUe82M!1^My;|7BB91;Ok@!u5L+Jbn=_ZC-Q6x=>mSn z`N^aAkz2yg(fs7m6x!Wg?>BVw*Va?_(`5O~rQQ;W7Xf@rwJVdsC{XXVyz{IhJSp8# z)=PGiU-mYFu?dM_(mRkIPzT#8%MMhcqLkS8R8}6x-XGFQY-t~@R^VRZ@cOz}y5ASU zQ`qjFfdU zi)5@*G>wjNIxuurA{wV6mxLy5J%sS*wa+AD7_ZzXVkb!ySOh<7>u+P7%Gyl;B)=+v zd59Msxuojrx-f~nC>;n`?7ICgU5c!D8!aa!mS7f4XZ zZL`8=ELgH$Bn>Z$XkyXtaqTpgQV+taEfr*m!a{J6EbCwvSC46F(p;rYjgZ}W-&K83tZn?m_uP;syvZ^RI}Lt~@F zOlN}l8Q#6A=46bJ7Eh6!xe^&GxH4$Sbxo<*TYS%13X%!*<}hxm^hPAxOZ3@MGLg^S z_PL`37lZXY_2yN1vk1L-NTPhDAJzwPW@hbG;;=qm(8tpTxV+^{z~=kh*HrS&dX@z_ zed)+i`uxhMxEB6GeatG}Q{|ofHG6Q)2%U=!eAKj2W%VY+_wOLjr){2kHS0-Bao{m3 zseVFb-=J8{TPnLpZ~acGS1IvZl|T)k=2a!S)#zW1D$!SR)Mz!kphV4HQL4{rqxCs! zoGLu1Y7VIyDHFU-gZuP&quNo&s#{dxNu|&<;5k|%t!iVFo@;`tf1_v5@#gbNNXbD@ z7<7fcW{jGy_HV0Do7ec(vOT$?ni@*qQZ@Tj4Y84H4)F3JJ$^^+AJpSs6?jgm=aun* zGS-uF9n<1eZ|6-8l}*GWd~a8~vqxR2ujHufZTMHJ;VZ7y=QMjV`6gA@t=eBxC9h?N z@0GsIn>G5VKCJvFmH%56x9NXfKYNs6!)L%XJ7{$$-|c*F(fUiopyq!xs-7dM)OSWT zky2mo)gyJ}AD4!SzqKr${MulprrE1`KtCDA->V2ao#QBT8pqA-)hOp^Ewi7o2Kk4Ckq4O0IyszdG5qhITh zdi1yLVd7rP(hTk32~9srH=a<-kCSj`hHmO$GB32-sSZD;m10M@ZEF*19kpZArEX+r z==b!ei{i{nr&=KO{ZTz?T{EOd>d&vmVNl}EDC-BkJW=V_)u7GL9##AX_3hKBHtW|z zd{jTEVx4@jwdmIY{oJmfkE+8RN9a^cD*j8)UHJb72 z9gdpY1d4_$+nebwDod;*F2VUYo4;#Fl-jjOc|aU5X{)i#tPk2RniJNV96_yNqvv_U zuIH^`o_^g%Dn5w6OOzPKUrk))t#2JlX3D5(d@@=myT zx{T3hqJdI}31tkK@q(cMj4ZyFcb~qG+cR-y*|>MH$S zy|$>^Xlm~ECj0GLL<_R?+s&>()aYGnTmfsB4wQbc#T5`Bwi-HI0qgTP)zIk*WNXj? zRv-Mu4u^s%0v246#Kdu#q)YGua7eY+PEp-W7&72gCoGeX<@rvyivefKgTmTuC2m>>}%%8>~sZLctlEiJL&~Ae)A;U9VdTHB*ZzZ zR&yjS;w&60;bU8gl6&nF5EWt96V`K-z`@qCl%t={sBbwF7UdzNpzsdR-^Z;x;uuk_1m z`PbSme1FqW98e3LXny~#LvZZIrWb|=Y~$PE1tF%(O;UQpbV}dZ?B2T95EBq49eefY zn}(NoH6YC3Lc-v5dwVr6@hvp5W?M9opVe4?-s0-{rlAw`PS8R1{H?<#YPjX>wqXiD zUL784m~n((mQK8$dj7G~)pM_*0gOsOM58h!K$oJ{!p*C?qxs&&cZaV3hyCyhZ`cTw z=&nzdKk6;(&`D3DkUNvZHu4Y$Y8(8sy|58CCC9HAZ2%zEvgosY?r*Pj5RDR5{p1D3 zeB74XSi(P9n3^8Gh0toDcew?o2k42f2kMAVvbhfZ)A(Tiigib;s}Z(sBHnem%cBm~)m}Jfc=EmxmWF7W~T0Sz{MVRm-A3YYO|r zVyLvPA=t2o+v~th^e~ z0{u9%(ecJ;@q#l2ZMU1`&w<}Nn0{&)&D#-=qJ_=4R@`cUrExwoDX}mr9aLszg5i%b zodvRntXCpj1<(^-4MfEYJ&}5G!?u{QRUR6ocmxd(!qcFLU0`|mDDn&1GL7d_?B~T> z2JQ;rit1(|3E{n-S-bUomJogb^Tqy;*Rc2Ff5`&9|8yo>+Y`|E{=ba#qmv&Gx`}TU z###3u5CuTKsU-$FU&FWlfY4AarN2Dl_%^0qX;ZITv zdn;RumDqK}t6O>RQ9pKo3Ws3MFbw+)^vF@hA8(9Fukn34)*zSuc-!CJvR?|{KyM&f zZo=zS`c*HGp-3wD`r%3G&0-8^8g)Ta^F}(a<+?q4O`V6p@dZk7vu9S=ieXg2qH5Kq zYc`We(^<85v{<-xPZG8yvuXsLaP!Hc`JSe&qalFdzLqXem~P0&T#) zys=pB|8a@=yV{bhAUZOy>RB{I7YN~{ls^%EFgDvVpMM79lG+bN#`0ep(5NcKAqSVK zYnRhOi_VcD6o&2;+;-tj(P~D6fYI&3<(>P9h{h%QvTD0ea{c%h_w`L7i`k-)aQukz z`&s+PcwhU+33>L9Af9z=u(gZR-2sdpK_gM&h>RV-#bi)^B`5JH#*XLy0b@r=;j#v^ zSSvxFoD&*#`J$R1<@DeFhHRZu_i2QYzLYC9uuUKg!& zPZn>~&?5)uwr{ew%3+ak1NGZKP99)eh@*HWl@$1yGdKesCZrCHA*UjhfJZC~+05rO zWA%{NH`(c>pDDz^*Fp$f*UW`uPt%C}r0F6}4Vj9t=`ed_f69eLSKW!J@@wMW5?ygR za+p27(BJG4yW-v6vWF<)Y>Rht9;cZr3tZw{=myQ{{CL*vQIN3z3B@AFgsnBCz-hCYHZ)dL>+CyUgrHN;jZFZMR&jIc}>mqZ=GvR@oTwpbq zMa!6nE!~mD55OmgRUrPqNl`#n5TqL8!4x691Mhsj{A_!N|Axjqc4Z=t|6`bjYA6 z5lME6Os03cQZXKGR0cXD^{5HU`T%{B&9ysn(!hoxP);4Ec1}{?=sd zwPfsVa1ZPq>0FE1Jc{dx&EuxH(OPe6_RtMTlyC8ZF`BWpJkh_idEDfG0Ir#Iqnyem zIBdJakI1BhF*$$Avk8418(cqgsqIDSfiBU+`m!*vc-Oc#ReE3U@!iF zQtWE>;*G`3YTX%^1VhM<4}aaZ;%?iDzX-RYlP~gK?U$2fTPSJLf1ElpPw#*wN{fUk z-j>AaKzg6sf34(o$?%B%w+-XltmK5ajE5zfH&Ed5Ltfl60zk@Pg2Ik*4J9uW`4 zD6dH|#7$V^UYkAk-eAFEbXjDV2)!b^M8cD7N7)#yRk$?5tN3cDS}nW8rC#Gfc+`0p z=@IwApQ3(r8vyOUOh5WdR32%F{89SRpRyPKztfL?5c2Vl){h=y9KNi6bWS(gl-8ZD zvzP?vF@uncYX{|kZge|0zLW)g>6baZ79UMEbe==qXb_$_AQ)+~(Wy{5PC2HnwO5t2 zwdgBZ#&&da^?|gd%fz-{qgK3o@pR^NtHszy3oC*@5?a5fFa4grv`Fj!EA*v*(N|yk zqyNeJ(lC#>FwvJ50uY)NqfQArH?5G87<32D<3MfkxmP0#=69 zfUh5cwm(Iir2ji^N-*Iy>GGtvHsRM~x1XN8o9`aJd-(3mE8(|q#{fi=08Z*1$2PsN@yp0d1fJer3A2zy8l zzHSYiE^r^`r2xzo`DEiOoTNOApx^lW(jQ0Rw-~P_k(n{7B$=5XH(rZzUHURy@NTy| zkKwYnc9LVbyumc=?89)mraw7n-U%;ZWnrvb*ACMKh6}C1z6DJbw{T58GzsNTB6}4=UfVY%b~1uDZE7YcP<6W+?U_-OypAvGybFdl#2K*w$*2b{DOv! zN9VUVdNkjsR5J5r_-w=lZqZ3-xJ8bn?$beYKBb(OmJfmd8gpf39&?2b*qp3|xx(CN zEw6Lxe2%b|N}JS(9do6fZzuz^zPkmc!UFk|V!~Mpd_Nd7r8)E`1v3TLu>F`Rh**>9 zXH#jg`*>A2+RUQnu&G6%pQ*k+wcPILUnXM8ab&XRv+sGy`man9YcOqEc>qZELzMt$ z3E!(jmI_2oHJx2m0=i?q$jZ0ZotP-U97ajn<`XlM+Ou>*PR~D4a*i>+3jZ-5FA_-G z1^igl&RLooPnPemy%=weksmg>bo+QVRO&k*uYgtA8rZ;<>-Z(lE2ob?woc$kJN{vd z6Y0z2^uSwwkID$ZqX-&QFdQe?$PlGCqIsSEv!vyeV4$YkD8OyTQI-%N1ttUo^Opa) zkm*e5duqK_xSiTrb}ke;`vJe< zIg~_au5qrn>sD6cVurinZHOh*A5HW;DSfEy@kDT&9C~1(C*F@43K-(sKuo5zS(Q0m za3P{<97)V*lJsRM_hVryw%*_O3?+RY0?=vG@scw46suTfl_nvXxqAd(2+;e%S4N0x z!+C>Q0K3h+C4+^cixp{OhvutlhC_m8fT>e9Q5bq|(aOQ|YY|CFB3KOB-Oi&mgS}QWt&m+r@e{Qs%@L^9j zRQ{rvce`|La%hf&faX*mhJc<5ZOn~Yo1~XZQJao&c|SL1Z{B&}?&Fmc#bA*So>pIh zDI}CAe_j5p+6Hx>s$L*0(HeFY)2q;JkV#)~9rTKIwAU}|Mdz7DYWI(jI(x{^qVj1y ze9WTunyI4L+ev(mM@C#Dm#vwqhPP10VsO%XdeMMpfn=`@EeGp<)pch$7nQ$Y8)}Zk z_hUa=pK2EXS(gHU>XX5w^3gCkwG*ZU3x9)xjwX9nr#wr|Ztn=E3&|9H(z6-uojjA4 z3wekSd6aDL;StOX6sWxT6>&W)c-VgH$&@TawJttf zP4EYwAY;G;ETcXr2V-E#@MPxL%{E9p~2OJa{H1@=B(W&Q`6-&7UofiGL!2 z(cw15H&rQWxt3Z6&%Xw~mnMJM2;0C}c*nFRH!#~sjKax}Puifhn6yc2Ac@itf^w6s zRbXw%F6OtBH#zxHo8;dSf64c5<=AWc!`?_2?veMc*qfLPpgf$4?MaTG1GL*DEI9%f zgk%-rC~)F8*xBUJI6Y?E>@549wDOK{)oD2j+hisP6x`eYhy+Jo|9dJNutv zA8u5C`cK|ITyy#^_Td`AvDt@PB}cUnw-N)`hubXum)M7A0x?EmrgO~(?MjNhH*E{Q zbTZ92JSH$))~Mg&k6@?}ZrEOxhd2K&cH->+oPD?(LLd9^bUTKzn-XOpWOl`39$+_H2_ z6rB$QQ&8wot--~x7o6r|AXMIP-^z8u9L8i3yzKobS~Y?5u#B@ElHTQx6wbu)PLCUp zcE7BH8gzUxa!QnM@Pf5M|8OB%>3zSYGMM>}e>G^YUG|gGuV9LX+3Cb!#wQArS96V< zh6(6CX2&ZGG~t-*mxjZ5)4&qf;~x)`_p})(RW`gch&m?~w=8WutPvZF#e|yT^B}td znV%>It`Js|!jg+!GDfnLiC$Zu*saDNcZY%opKs+Cyl z$qgz~(1dOjG}PTT1+k6r*M*j%KE*@xVS)N8BH-(Jh&?48UZrXAV;f*&EG7H|>gaXi zIAzzLS;uhee+!a1P+6h!5=Y6K2K)fb&@*QL1@#6z#sqhLD*f10Vx(M>8Hwf88>#fB zshPs(h-BNd8~uQu9@tdSw>`ahNhZyIjL1=rk3EbxyM@07SzQyMMkw5-H=($z?I*M! zj1F>YPBWf0(fP9@f$~-N(7gVR+1s$F1PCq zrld8M-j*uEn#>UFsljk6Fq>B9etRPJR4TTE6yjdmvGo*x=90`1&WDdx@(>OIysZ{o zt?oh0c&P4$WZBEI+e`1z6eJPTBF$`qX>6;PVZ9hUgqc=2!hG2@jR`h4QsiXJ`ALbH zH6g!jrQKb}N%b=ZOn6`5!&~+|C~0L-bqI%e7SxObXeVw`2jcbgW8OFSfQQP(`uJ4> zPF`>qdoz_e9{cx>ROT88r@7cZVhNA-WaT<09j6otI2G4%`PQw0+;~4bZqdq6^bI?- zX-Y8rG@i|YJpBAYzqOn5ItLUTgGK0aJZd`HxN3F7^Q_mLdgyQ%40ey>VHK5fsRNm6 zL;ilHb#M72&_l9CwtG00e%-snWZJTH&pujmvJp+YS^o9Loxu(nJ|_0+&+-Us7e%AN z06Bv$3FKO$eE))TkUmQ_aue=Unm#c7Svu%xz#wdfoTffu*%jo82PsOln6sB6k_|Uf7$ct z#jz`nV^=(^0)t{m>G;GRKHi6hr|9QlehDzAf^EfLYcB?|<>&w{kpmDNCWPm3L0a?b zlPxiOZSGo}PGd{_DNaba8|uims`O)(WxuIxcoBQzosm99W-!dOk?cK5x&7 z{-n5CdEv9>x$=b1N<~q!UT5ZevVpg*buaoUc+hYj7mCv;!=Uv-x0kLw$II zi}Eq1645|I+rie~4?5h2t8jncE*LFMoQl^u6t83cUWn3Ka!=fpS)t$+?_hUc>Jeey?%%_xPNNPvv|>_V@UgiJ!zz zj?4R;t^I5D@KVg)z8ycSwIlP-m&IpEPuOEYNH#6($;RdS7eE;)gK*?Yq?l7N5?tBL9mCk50i(voWWVS5GG9R7++uA*Xu!gq%Xag$>!OBFOKj4*fejmEH%k+3P}1`Qphd z+|*AggCCK1G^_!`P2HwS2sf2Nxh>n3T&*Au-12pFtY35~ZU=QgdG)m;C59uA)872( zQYco=7V43HlTN)TFZX~elwhF zkRY|_EthpGZY)Omi69%iY0RXhJ(YVq3G|x+N&-=fhgFoO`(5i;GMnopolT(VNwXkHd;DL(}fNLbY zIweeDms5!=#^2@eNfU$}IFle+%uu`noc7$7TRtL%`e1DJJC|{WpMoq(21WJTF9QV` zI{%5w99&gPihK~;mni?u{QJVTOr_UO41i{j_tAoR-i)Hg=IMN&TU7PFOA9zqZoz& z)`>Qtb!BUveauwK<6m^1{S1(>3wJh}PXrfkK8sQ`?KOOj7gg741}~7p>`-JFb^vZN z_^nMkb0zPc`B7fk<6ZvL9&a{M5y^XI6;1uYbT{>?r5+H3_KMjVIJvZ*F4ah1JK<7# zSlUjys-BGmAykSr)8$Y_rBpUs_BB=YHkA}fHBp4J!&1QNMQikuGacX!UPt0I?Q`{pi-N@P%AAMeL+ILl9;?n3EKWb|va3T{IHMoPOs@4NUH z(hso5-Dj#4T`PLD_|kCGnz=&+wszp|vrphqSAm5ajVkV%$v_9f8Q7Hm0XAhYblx_d zjG{%4@GG-IOY2?^#-8sARJj7Ru7D0~RN!=1V3aE`zF&dvJ8iq>;D3MmiW%j^PaNT2 zEx9^|6T!zH(BviEK;RTqq=NG{rqT;4;G>O8lyCAHmT;g@(k3AIG#oy*dJQY>JWd&b zn7!c}#Ra#1FxQ?G&0)_Z(nH{KwwS}>@s-63At3E^dCUJ%$AuFXQY~-Nwmc;wM}7{f zjfz2!%is4j zuIT!nSA?4Tp3^4;bECqwlcVcvkyVREZl#6_Ix6K zg?^a^{qot6ewhXRG7b9WvmyO53;Jam^vh>Eod2*{&@Uc8bM(vap}@-qAd5U`c=>q9E)5`ifBTt{L~0(nSM&`;R}YHi$IqX~O_T^` z>>a1;Xk5SYUkA9&Z|63mvH2Z*@8BDj*4I1v?&Nzn->k>id-#T+|9UUq++Jh+^e4HS zD!8NgYw4}~X(Dq4hj8NPM0zr@dna=UTeLjxilB%NAy9yYjZUH&_7qWwQsD_aF?#~z zxzpC+b~E~6eQWd6Q${4ySC=HyHzN)y{0q|x3E!O>yutp z=tg|#4(joP6)NLr+?v6yjcQ=wmS)pjuqu_ddG0^QZZ-q+Z61!#+_1ZJW-L7|;K+k0 zn#1gkxE9aDUu)gI8lv;7aWOLI|J zK}23A%AUD3j;EyG66Om`%f**YrEiO;(q9_^d^sY{bXP4k*`#zONC6VE7J+#Z!Yq6~ z7J4HI)($ma`_+)%C{@_umZMV~Turgs3+91oIijR+5BTBhIUGNFK50*}udu_p95x;? z-Z#yEV9th6{{*Rd1rB2sH_3%~fvL;;LfkidcPVxbXkO7LR|w^v0qS>d(MyM?gMKP{ zh|KGT@#taiu90EE6I?;;#?LKUX9X2n1pdWL(8aP;Cshvu(ZZhp+*a?7!IpP!i+9&4 z?){;gzhe!dlyvUUMfU!F7L2!sF5nk9WIJFv)oyEG0Gi&Z*4e2J@Y)pb(TIB7WEIV7 z&6b4ziVr=XN~pTsyHn1()yYzx)SY(osaCG7;DfHUqSJZYeM0zhbqh7lRNv>2nzfnc zQ0bbzRd_5pu+BGD%)z_P*c*EcgZt4&!{GjXGr!X7tr9Z7=rZqgnSVzn&Sav@D_rK6 zT;_MljB=`6&UBY^O)lqxr5n`R*l*d_%w9i8^|+VPZT8*Iz6yQWzVsaeA=CC0eK*gr zHoKi2edn8-RaPaBzC-QuX!PApzt@m(hb#K7nO;HPeLL!}T7tey;LiCE(RVL?+tGKc z-qA*DvYzG9cg;M=qwjtmmj0TR{*g)tV}JLWb;YK^fIlb3g#=7`*av{eN5|cAIe+J& z!RsiybE!x!Eh<>N{`8ze_XyjHJ=K?FDAUl!R`$Q`jO zw?Cla6pXl>h>YY^~_) zv>zSsXGt5%qQ0JBNvCLVP9hHiw?+VE6Or`gR%eXRXggxXwfz=>Ue-(eTlWe z6@_q#%*7}{_#jmz&`qIuBQ2M@cbT0o0-;Go#oI{TAn5UD$ z1;aO8=8o?Y-n9J(|HW_Z&!72_EC4N(>E4cz67Ry?3rL zj*fR_cidb@P27`Z<|U936`i?UHJ)OiZl`@dJz<5L40;}qB6K}KPW)MKWZ6TV%4>s=fWU}9>i{A|M%@=q6u>cHuw=WST$!?~P;q9O2 z7NeWM8zB|kmyLD9RZ+&fLcpe|#8C<8CU=}5kr!`lXO;6viGiS8_tKp^y0L9?NCStm zLiCy6{S9{<6)}MafL1%$) zrt6ZvPZdH?m<^LqlppqiZvO4v5_~)0@RI^MpGZGx zy;Bq5COP;fKY>TUH}xkEzTI}0w$r&qSG*0(-7Z9gOHPqF(#6bl= zj|Ix5-?UN62Um-Cr{W8;sSW-u2y?tUObsst6yM-!7Mt$_-L6QhrelL{8f^}``TVjO zjG&tyWTBhWA__r>@rtwjIl;3XZ`c6jS)u4r(hF{mVA?i*9XmWbmM$4QtEy*)LQq>> z^bKo1v@Z}q(>aO&8hsk7eamx;2VsNc?Fhhe=TxuIVAXk7u%>9=9vcvMQoQJS(m4S4 z&Yj8;>>Ot8TXhr*J5y8iCdCEV+~Qvz-hgr2Lo|inlmWQv!cGCV!U2HWo8Ikr=75_c zt{gYpo%jD<;3jzS#{#$KpEKYV`?&$P5x+9vmV;fv*vDLf&YxKU&lS+=afdh$l4r5O zqtIJ*tBt1~O3^+k>co5o+j1JEwKrk*ze1~^8T#DECjS`#o`v$XV)ZnVr;WD$4*ekg zbsdf5X@`!Wx2jg>fw3Kpww;PPd#1zZzpmM9ID<}BW~xk<_6gFd^dVQiMQGjXu>2az zdkr7efP%5NK5IP*8+PKf%3ouLkTRUbMwZ zUoKRos#&jCy#y&CGqswM;3315h*#+&)eQYqoqVf6WE5YDXB69-!i(eWI+L0xH-~w0 zrFTD4S47yryW$ILq7p~N7os-BQvX9FQFn&r{=qIgL+gHGN9579Izux<+tpy~cUAX(QQm8?;5@$KM`FzD` z@4w=FwY-{tzN(AXy5F3O8j(%|pRFg!8G0)v=@G~VLhb+XxzhFdKjmCa{;i#>xohlP zExfPqxtic|C%fDm$;~@gXS>Xgy3ES_%mL0-sISrgJe4X;6Y=^ox4^>3zkpDVL>O?> zXm4?Ovu4~M;|DH^LmjexZgXNcEzb*1X-hm}i{X}DI11kVTp}7GTQQW!lwI%+l5~Ps@xtD3&ul3r~Vf!;j<9FzmzIE*5K_?#VYp zRdHf`Rs4pNlIhWjhN|M??zs4Q@~;dfZ7-+N^G5hVk=~&W?w^*a>GOK=y`CI@OR=}? z>uj6u^7~834rwNP3rR>apABXnUjhJYMFgqY+6D4$l|BRA|LoH40<0N zf)g<@u4|@45_*0~w`NvR`K>x$r&M+Btm=dmXQ!ivRJYsO5h1>_Xj<3wf)JM;_Vl8S zmJ=e<*KOQ6N7tBm=a;8;L>1GFv_#NB=R)ua2_MmhN9-5aPxx8^jX@=&7>5DHbw#Pn zx!qGEyMMV1_=~KcL{GaXn6Q&MWhop!l}JCp&XS}D=MArskxHN2ePV(T-TVU|!t5W# z8_fPU@H^TZcHiNO!wJ*6M;x(CEKm0b6%RqN;2g0n*G)AQexR7i;f88YWhRW$hMH_s zd1&EuTEOl_o`Vs? z#$tr9u$t(Ff?ZsvjWfWe=(8X4^|9VNkN^GWF+2arGv#b0kr|FA{cQYrls)3NzC9S- zkZ?oS4#~<9DU(7qGoC0T)FN`t-oaU=S&#V6H{kn%0DA;yNR&U5^e%cMh0cC)D*aBP z?6E}aJA=oF@;5G0-PzrLVP)@Uujt>|{fc5Ykil)}3@f*++8RR!q3XX@+m~-d2jg^_>54X$4;m(g!Z{pWBYZCVc zL!YD)|LVfUeyshlh!9AFP)aQ`8d3;q1Y?#wPQ12c`P<%|=e+MoNM&G31{O>H znPS`-2AbrqvhnH4Ujo{ob*4Rn6;;Cl3@(Q8fH0A1!YX#6x+Ebeh%0E82!=I|!zGwqi}M&r{?X_eQVV$t&_0Nk$JIU13Z30|h2qDwLa+Sc6`Fk173xFZ|7osQ2lMwX>vbPl zte2!%*|W5E#3v@rc>4n1F zXtnXlm?P|_qzey%jA7eMob6kR7ruZgvnuSr4>GG%Z^Xah_=Tk4HEz*U>95L9n_ZU) zZ`xzNoIFYu(D}~;q3XJnk_x$@r!N~+;KuVB&*E`JG>G~N*6pSt2Q`8fN*l@)wM_R4 z(EQS(S)^XM^s7f#kxns3Zof|$cn%RvkBCE z68jxvjr-T~#F8@HO*i&xLV{HV%FI`fZL}xBx(YJfI3oSbK1zbwVMa~=S~P3;f|QQZ ze=RnZBS8J|)y%0{<=oQ?^fRa1(6x{NVoaelPm`H*l!*haQR=N0m9GkNfa1Qs`sk#Z zvTCH0iXfwLG(}u*+DxFJ%GylC0MtM)btFUSb z!ayn0cV)z6xBPBmYU^b9I0Xx*$u46{cRk81k=gYcH<^1fmM4~qjwvs$?vkIjeoqZe z>Uw;D48iBFbx}swPvy|c`p`8us=RCao6$qn@0y;R&Am)}E$p_n;|hE@TVT6_Dn*xQ6f z(9wR_hKDhB975v=j*2v0yir72zR=7qrg@OHWcT&qT0|$Jd$N1beUkf*_ANr?yi+~! ziOw|UAKiQ%>io0U2j1o2iGxpWGxXXXaY_VTJNYqs&*8(T^Zkvt4j=v^i@y1d!-pe! zR6Mh4{HDM*3r$y0(`~DIRFH!6&t?Iu8G8Y`1L#aXnhfBnrJu5P&=d+;Yf?)6FeL#P z(ppo=H9oFXW%ZhQUywW@)CCZutZF4M`H->ltyh+6Mi5lg@+Hx;q5dfk=J52~Gar6z zdclpj)SHDkX*R64VRP1Wt)_O~A9_D|l-YXY8CpDKM=<27){>*@t0^+9p!+tp)~V7f zU1>B~n|WV~2zT(L?!z~aQjumGO-`M4K6$*AQb%VtcMs2%u?Low>ynfIOtX7TO*?;5Gb|ktc!_Y>UwLXp0_Ta0{2f zP|Qr>D1qK1ZB;f>Fb_V%v14?7S$n}{i%EAQ&0Q!t)HKmBZJ4maT$) zbl>H^R`EP58;PooruoSA;(Q)m9yfvY$jalU*vUMaJnmdd{HMv|yoTjWW1dWo`=jWo ztFwye@u5Q>(xoFete3N{Sy>&r!~@CdPR`2ehDY|#e}ug5QYQUfCv({JIPdnM zM-4uIPS^{=2PA9ZQ7|>plAN`({9&aspOWP2VwxIOwHs&`qAM%{<|*-0|Nb|IOmuj6 z{xz$_lc9g>p0wZiX*yyxYr)E|Qn^#AT6R{onEbGgn|bCA(>k^p*f~ciNNR2O#lkVJ zqLLd=RCUuyb)O$qrCxOGtm??CVvIxMch1oyr1+>FI+AyIW9TTpqtUrLllM`PY71?) z({px5*++!~yRC=Zvw4y?ciT<}FUcLx5~je4>P}p5gxdwjqsRd|@?%3shVE%Hl;wrL z(ZiXp-edE>@Y(4M&pa*IoN6L^{LB?2cshl}i5Fe?pbeT+P!ky=)l~H`9VX75C>d)p zGS(yP>DUEaR7XGm@5$r;+vV}L+U^)Tl%L~PJ@l$AT4dSNME*B8+x_e}j$u9jq~N)o z7{Q2hF3$t%^_vZv9RolgmIdgig!(4`?eM%b4_~t3gk$<6;JKi&4zrGU?q~~H1nydO zWTtjUDudyZ{wI6{Cp@zSwx>kbd>0<477^#1Om*LUnHqzervYD z`=YKksf|6)QwY~~;2yE<^jT2Qb0LUQ3n1@obnmDa?+(&+aM&A#n^hy?3Lm^?oh05zKGnWa4L1(n5XqqZ=`9?z|1BdpiVh#W^>nM>s@KlVC&s1 z%tz5w;T{=!iMn}bjb&3;-Ay;&X!SXY736p|V|*WfMWvMN{!)I6rKu*m(!pQRkH4T% z=heGslj@C8uR5@_ZpO`*<<$$uxLUU+j``z74^g!H0za7JXk~YCnsbvm8o`-AC!cbs z{=mL3M}gc%bxL<#cI0&7I?Bf9F2x>cPs01?;{f^Rs0r%6`nM)fN|yD=dY?gGbR~Kye{IF~K$YqVRiumoSzRC~wzM?hBMO9r_uJz3gAL zm_t8#m)&29Z}KZz(%^z?(#jlry?xE>Jc8to^m_8~o2>qWV%jo~&}5=)GER|}2#n_z zj+*b;EV7X8UPGmEC)ZUQ6Z5_+?Q6xgd?kZ>*4kYgx;!vqFA-c`fyV*kB8T|R0KN`b z?$EaWHJfa<=W1>a=o<`Iy=||PuZNJhP7w8ROwYWSua-g>MNi4XuRH4 zV7+XcC_XW#rk~%KHrQqP9uHXE7P{A$lN>e1kZoiU>x{{7yB99NY`Tm&O@M*lOm;NGS!V=p8T-s*L{$ZUtkVN+wmficT<-s##v{flP0Ia2 zo7^9?ao$>NI=cVKe&xA8_$#*Hfc{CL*K!`Se!zH4*Pr-j;kI*@)qOl?^}+vvwMVnB z9-#{%()X{pLnnUdCztitNAB-G3s=N{9ddAR%wzLOi_Um!IG1hw67E>p*c&(U9BKp9m%hU9F8;W6W_R*^67cas3XekL ze)fw1%2E4qg@c2LWI2_VK0E)%A%KF`dqF+s!2;h4@rg@-a*w1omN~4H>F{e)WH;btx$5y$$`YxSuwf zwvYdd{QIQXj>L))0^#`NPQQcilw$orU)MCN4g&HL4L23z7wvUjE1`RC`H}LL?6N0A z)tp5v4g}E0Je_Yo^Fm*GI+00f7rQ;BK+E9}Z@B>IXV*b6cEkVCB)h0wuc4C1eTO~w zbGO^+dK5ruvkA{JmHvGS4<}MBKD?0#!-?{Z^Zzc9L19fgVFemmq_uVe0$^1y;}q!e zF;9p1Zz5A1+9%SLLV3<;T~L|p$}lN!r|~HMBoTeHU76*&a>t!vS5#xvofoZr1*tjY zmv5N=1IZZiWpJZfoFrCw|MpsLM))wJ=qHys5YWADdcpj>$@nIh)sa1TY_Uzot3aGS zlhLpBZy^xU(kfi{n9VjT%}1S;rf7XLCmb;?m*l2p(mgcqLRg9EtJw)xX@cw6m!pp5 zrY7kEU`ZBGjK*d-Ki_oo<1I0jpLA;&5G%W1vjbof%M#; zdicYCdAA;ZuimEaUmN>OUAA`$4;S`s>-@#twGrGof^quyQpCx}T?PV5%~6SnX)-kO zkI1aw}kr?ruk&qrc(%;5vZ6Nti zJYfDd68E#e^zUr8j_Y*|{iK7F5te0lA7{b$E~d*OW*i2Y$}9r9In=Elbh1fc#O^8K z9pH?+nS)gMz8g>At$G{80JaVFFpqoTGsAO6JH`16;^)#tW=>SQ3rEmqs&EFXq*(eH zwUK4H)4dyq_<{NPwU+wpN`Y=&$sqk;cUYH0TU$qF-c6L$0FX8B&=Bmw@-!EtTX$ANg`p_@z z{&o%qfOd|3}?(LUsJ?ChTk7?ltTMla4YS*ALEJmg(0uUivX^9fbbd z1mvbM40T|d*x@>wjtM#-QWp(pI(HX%OP=A`k#jCHyKv6W+o`v*T>dDmip{y|?6bzJ zq@$W>Ky90wsDbwYCC>lE&)3R6Ti4hT@%0kOAF*_lhMQG(ul zGV94flWF~nY@Ka&oy+~5bj_eeVm$ij^Z!2F@yX2f+09p?ez%!F3k?qX9boA#xrcOa zF7VrE`%i_ft*OB%Q!0-X1=u{wW3%_LBBNEO_WMiWrgEDl?V^vkQ>Q*i*9yf7JB5G| z*=9P2i#hn}Of!wzDRi~uZ8G&`>32^A>PT=ST{+QaYrIWB!3=G59+So=(wIgpU4*{DbO(G52Fs`TXE|~bqMK{N^>&yTC)5AHFeDY8-bp1 znn2Br0QQkZmC^H3O=o#;Ej(+Vz=Hb~_q^fRUim6Z2g(d5#+-UYFZoA%Ntw}08hiB8 zwMTnNnc+)J8h!f^)3sC`J9U7LrItozqhZOpgz&jMl5HTgw(DYaGzQFg9ZjO0z&Fj0 z)-dYzpWaY+xv__ocsIA|hVGwAlyH%{Z38HA1Mrsoxe~{^$Xzj4LD#u_52XKK^yGW~ zSb=))`D1<0A1fU97CVZ7Y_YBf_Qz`S(~ABs4gHLm_=fVpHUBl&2_XHWCy1{MJFm2; zwMwYHb8z_98u8G@HqV@hg0~XX%sS__|Pr90+XYiyCAhT z>Z9a;vs09b&qRhQHip8nmOjU~91_W~(wS7vi*hJ18w@rSA=dC>HJp#xk5b=EDI)M% z$iTqWpp$I|V~d-OTkxq`(HKRgH;ZMH^)~o6+E=g=PIsB3zabPo>uvCLmwE68d-G#t zTA%yt2fe3%rR6bgEf%7$s@8v4|BC&&_|)qk;h|~+-UGfaTt{6IEqHWv+F$tLvVJEdDzN0i{$(6$+t*$f~3eInU~{5%P7EU zlJEnE9y_ID6_LhBGC$!mXV>YhM|ziI|J`NAUFJvnX72u9_U0R3 zvuZy`W{&GScB{*L+-3d_NRrJAaUo;3y}N&oaryl4FB_em#|s|^36)sKK(*o6akDmu z4z6dmqS0nmrb1Nb1@}|Fz{NU{K5JEnq8K0 z5(Hv6s%Q~c(YOQTE#izld7)$Roc?1SC1ujk55AW-^oRp)W|Z>WrMJ0Dj?bQgX7UT0hF=kv8mLo4K9?5ADkmtE%V`I!Uq zwsZPeIsP(o`uFf<)QR4UU+`Z1f=D0ST`~ZYcgL4!RT{>8t+SWN!APh0;RHe6UH=Xw z6iDUPZ}o29!Y|#z@8{=s?~WaoDL3HVmMR_k!}AR*!ENBVLm$6epme+Cl+6?@R4wf{ z{?*YhS+7Crs!@NAWEc)`(RvMH>1CPTo%|5iurdpog$fi+r9Z+hR$87gmS%u#(S`On zi@Bf))8a6fNIVQ45@AHB8-ooITr||hq1tl}|47xM(IM=F#IyXFunM4^TEnQN6awl| zea=oRX^2S;7{1g>W=ow#xXE04RejC|D^dMCJ)GMTwJ%g49&zrxfgSt@kzu1R`Jw4c|m^NHc+Z6;`qoDzLd9F zq_M7XYfl$@#40AL0#jC1j5?8d7r}L?P9*l~lXtkPw3!_uj=Dbe5;!50zz=PtRW`g( zc4LZybtFSsQZ|U!81bL{^mg&82_DJ@j{jvbHP8NtwlbR&K55Nw*_&oqstwEU7bs9u z!o%k%KD?Kwpw+{M_acEO4zgdqi}xO#|4$kSDd&2KU7VFw=WpjodM#U-KZH+oy!+AGzU@PY$qb~ zc6>z8MNNBDMDy;_i#KW$%+tpurfU~z-eJ6n9^QXlZz9Ypl8^W0f9A*Y zO344)$Bxt8n=J43mW&f9e=o9^ZKtt6K^5)YB73b-Ucbm*+x4tpWUpR5>lfMU43wIW zC9+qzFzoMoIuxn99ueScA5FX$;OmbF@KwohRlbPnOiZ&K9nkZiSS*z=!_zkM6bI|0N6Vaz3yH2Y8PO8Us3k8wPH$jZBtzFFM5!Cg2qM`N0JI%Bt;T zWc81W%S?(P;l-tII6-^8>uTzDsfnZvb(R0kz81Id#{XRWs?5OAa&&~lBIupAqtH7~ zBm9XjyLY8`nxhgSYZ+4yY1KsZ&h4rry~3o?(QOx){zjylcsfcM$>5wppBKtJ_RT9U zBL+y8-+D=A2uOTH4}A#SnCs_<=&qT9K9j-IhL+_3g=&pz*!iQOEM$ug#b%fGWD?}(A$5UP>V3^9B8kU(Cmid{L zIsE^ycQ)`*RcHQBASl+vnOIO%tk}|;XlDRc(uTf_;3drTVHp-6Hzf(o5 zRs4c+c>!;gy_SLQ2V6@v(v#tMP!|;24KdsO+d-Ra_u;%75C>JuKaflnT{99f9bT*$Q}bu)o< zZkmrbzI+M$Ixv3eZC5mIxicz4lwuY|)-;k7v8L8+*fy^!DI^h?;{}H`cLNeic)^w4 z&{wIr*bEN?v$&5fGOMHDJlDp9j}Kk^gSBqT$ToOYcAJ0k&kZc^lm_2y15TMY$b@tS z0^0$-AJbAa?P~^^&2uIKjRUUc*X&`pITvrYTyXpgC^+C!UUj_9_$N1Ux-mu=*ZC;h58#}%R&Pm^6e4|n3K+Hhxv_qB*o2H@wD=sb?WsKxlTuQ~bE$Ov>#bgUzdPq3@%F zbnn9@nb4Ke@}(L|k>a5{Fc?YXgZf{YdAC0;KA_3iNTYT?WiIw6ET4k1_Z`(r$``=E ze0}LbA^#Aa+ougw;X$1$8A^W&rrwC?{&BL9^MJ2U;aA27W7HV;GUi_1nESE_J7a2I z;9g$FOZSD|s1w|qV)v$;Hz65G`ioZW)oZN7lfy3&HlASzUUt4Z29nY7e#?EUW^Sjy zQ2w0wbJJ(Ma>q}`lAbsXPQ4X^Xt@;-vsY%{GKrNFj_*)lo-M&KC=30?l$Swx=%T|O z_KFC?u;26*kYWFU4**80&YrEEuNi%YASPAGb*$QbS8FbdzEz#E_}*p1QSiL{9Ymm* z`J*_8H}W6dX*7%RWll_1+qf_W#qL2H>V}g&pW`XI$}voDoHHsrlrv>)o+Rk1Ka{iG zP!iXNRH9W$h7;4dZKHW~=1(*Q8p?AKy1eOq>Jj!FNO+%NZn6GXQtk!yRE&;x<_uQ*te#CJhOFbE~-pES^Io{Fg^%>^4&7G zRs8k!vBo23lT|npBrW2p@G-NLZH<*ZIlG;EZ2LzReuwdM^?9uExnZh&I+f$bJ8KqwlJ{kfTeKTF?vwh=v1zuN-TDxy2Ske)i3m3Ce z^J^C8uWNZTOA6jLlX;c2kLbObjFxo%Ax3e#$@NjX)xnm2H1!=?5aj#|edvtgFw$gz zi4Esx_%Rnto~w-PwPq*ZHRPmqjzZ0$EbZdDoio>WR6rZ%fNJoqnu`!DvBbff9<#vG z=wM9+)-l$z7DdY%)QP&*hLO0L;}(bi)R`8Vxpg*kD(TPMn3q&Gpy!z(y<_HfF+pm{ zW-cJdC|i^ z*8++XT&@qUVg;pjhp0bqJR)1b&qhS5u9lhtYP_L9ul2cE?gB+xwCDqO*%{J2=W60} ziNQFRjM?YhcD8*?z+kM@rwB)$%-fC=99oxOM#{#jOQi~q2p;lZsVaLpvM@nM9pm6H zZitJ{8}&&`u5E$8Xtstsz9RnO8=zN#i&_uQZg@Jlh>`f2j?#Jsnz~tKQ!91MSxZ_W zqKGjsjPL%%WJl`G5Fn(oQ|3R_2Qvi)fBtDzsR+!;L`Dj8GQ$$P`4JPX#lF)I!fBhb z$P}GLM5I`v-bcb3aKCarm_kfO-kt8DsGA&VGb`ylxkKkqW()-*s4^Fms;LL)d&&V8 zpcFdTArV!nfD0><9rZcio4&?qE+T=MpTOZ|qrc6W-I7A3OkLoa@ zmq8^>Qcy{|=BSnQGN?2nRB80FD(PiVX=12S^|31HWl(8GsM6eHRnkkp(jAKfrfca@ znJ#DEA&plr%`oc8#GQ%MXnc!JB%}*sL-V1aLH>jkL|G;?*KC|Kx+?h` zgd{{T6EfFEN}W`hiCpkGlE#?dC}QP#6mCKwAk?~y%xZq zkRwqyA$M|*+RXRagsA%ivgww9EX^VMHZ5QKF>zw2gxyW_TuNT;U<`G+Hn zYS_x0@BWl7H-A0bWguDN-8E*S`Ep3yMCRlm zQ}H$2>FK7>;z4{7F<_Snu{$zgm{lF*%m)(UUf|Iruum-8@od+O#yAjJWn~sv?0>+BiiAoLFDBswO7`q zNJX&G4%t+2Rbf*ia(NewzLP4cv6@Q6tM+{j3QUp1KU^fn;VMKx7(d@N2*kxx(Z78G z0pVRI2#s-{RsJEIzh^!i|1~4gzjGk)1ztpkhOIR)NuqrA?PgOS&B&9CzzgxT5)8b` zfWQp*2{V*EYy7i{*(~)TOtL1NSjXpZ11Skz8_^g5YIUaD7Gdb7`gRgN-bu2gQ_Awx zff!3A`|KGlJA>5gxHohsU8yl}PN?%%a{OK5hX{z&jieX$(a1Jrx554aJ4j2HNDVio z5E#J+LSstdp^yu~V39B8_`P$5X|5meokFE=AGc`E4YU95wvkpP;FWD$p{`lL0f*yH5W79V}01lZnxi>j*Z!F$E;G)kzoisAraLmNk0;jh+IJak?6O# zG;ANR_tpSJz$z`i#x+FWozPp*dtxkAfC#a=oIk~Oci49OD@z{jVAE7se@DkT4V1Ib z3viAy*y@_j%eD{gatp4OGKXm|FtW&dd`<|%?2ae5<5eDN8EOcNI&hCZF9SxJL3JZh zv7;jGa*NbzM;{4PnwhxfSpH+!bVU}vs!7GhFL}gPG3ALcfhrDJwCJMGpJ;byj&v|l zo-KxKaD1f1bk++=`k%@#ALp&0B)?q$K|E1S3h>*>J0Unr?sw$9iHMPo=}TyAv8%qy zH9gV&TEQAx>B}0mk&Z4v=B2BLMV|`#m9*oJT1hX1 zO14CPrRrl<(#xRI3>EY%%{^8ny$mWX4pmxutV((rR9X?LwCY%u^fIW_5~|dCtV((r zRO$>>>N-{>y$mW%Wc7mQ5us=84VQ1iaEW7%XMuEoCv)1D*WlGi$%F7r(a<1=9BYtz znHiX0=|ceS=wnsVORLmTXdQNZF6ein--Nl z>19x9MX1uMV^z}2pi)byQtPoQ>19xE zVH46_8XD>6{d6Di)4%i!InESoM*rndQgeUH@?*L3_%FTKtOLdA#?ez_RWs4*`a#Am zesz_kR#g(v{7{UzX9{GvOW(n<%9~M+^NP_4zU`OCJ>Xl!(wh^6-H-j9DmY>N*&f%4)+;2s?=oE%_F!`8VM;i}vrW6*VDq27p2p^QeGGeY6 z7^&Su;VPN11|B*#5*KhUQeqSU!&$DjWq!SEl|Ain3zZuNon2vLO}gTNqg46LoTN8f zH8XV$x=Q-1jmd?3X-#`Beq>X*LXP0{R4x;Gr2}26zuf03-HA%@F*&YIG8)R<-D-n; zU^vA%TUMwOZ`9LBVBO$dDDl(?|DDTpvBvRR(qJqr@ZU&zORa_aBuOGt*~|e|tsEDz z9Ew2D;7sq3ERMJ!=qERP`CL^AW+-P`QU(^m?DUuw3lHoM(d-}~GlLP^;-pq;{rxQ8 zY{5;ifuw;;1~|;z?)56sQX(8sR0_01xEZ#&<9z<4>zO?LxJ8U~5R#_j3j37}LEdxa z!{5a_1NWrq+4+^T+TriYanb7iQ5Ln(J}@w*$lag#gP_iC!7>1u_7I5f(a1{sV_TTI zqMD?ar>uDnSEc>|PuYtetV+%-kEbphO)Sbt?Q#Oq;wg*FcziiDd!+UOGH7rJY@=d7 z&wqz6k4v4zzG{po3m?QkRs~`gR}7qoMWa(M-1BW_6(s={jkR4|^evM{V$39A5!(+( z>Yg;foZQIe-tn?0=A07uCa=dUmH-B;?ahqC$-Rv)^y^+TvK!;Jni1Z_!}hb5JBs&j zV}I-Z?gNo%;y{#p5HPinN9+;bBX-T~r(?B83TJ*wMsKyx9gdYAq5UJyBi6THC7AZ& zNOVHz{_ZPQ@H=#W_Z2Pt4&UERc$sJpN%vEKvqq!~NagXYk3UQtq9b z*c~g~TfVR9#F}?2qxSg|WBYgJ$Y+P{i6@8d>&qW@-&^hvJ7Guy0Aa00n>=TJX?*&I zxL5el$SoOrK85xyXyFR-&4^U3u(X|cxk{xPqhmAi;fV7=Ew?rdku63NX8@0!Dv$rg8o`#!F4 zzu0P5u8(@RA8vfPUw0EGjZC41C`Nvu^@kxy?2WP_m7SfKGj_5T1#&Kamb>K(XWlNP zUHd$%zn`Z3jyu&cfKan{h8=hr{*wE8-HT)G^nW?xL>SBBtWEbwq;2p+})4_AiaVJz@)axOe{WZ(f+i-U*% z5Il4W9xe~yA^0pnVov}PvD8rDVQ4Nqd>%|TE`L*e`dWYNVUWm$XV&}A0w3!QK0Z<& z^Tv*dCoe0H+g+W#FONh3b4@0IG`7qDr0GkKeS2h!JGABZ=NI>_%ad2)ETGb)ASMo`iMh?om9Fbd*)4W|pT%Wy9Sbz4-d{IoV=?Fa5O*HZE&XM07C} z*U{+X$=BdG4@peCD|bM9vlzDYhwj_F+slJk;UY5ZvLI0vx-&X^|K!E4ZqiXP-~*lS zx|<5qqeE@CM7QqVx(l&Wdt1k>x3%5z;?~A=9dNXL+m2_pHn!c-zI6ivD)OzBwp(6o zyQTf9XSNQQ^K-n~HnnwZZ`-=2bq!CC@wD6J%s&0L!P~cO-@3ikDs?0Rs*1Mmc(Lum zj=dA)5qHPqJ2v{QxBIQPx83sij=hX$_tuSDH__S)+qcbr$8AGtt<`U>Deqi{w{^h5 zpH0k5-^SM8I^Y!^w{BF~StVNsr2St6MC2_aeyWin?%lDDzB;yUnA4d)k^Jqg8qDK9 zYISi5z@Q_VXLkVBL^ z1Nyd`XS8l;yLsY{#wws6fIU9FSFiK8|%h=JlW5bSg zN9FcyOz-Zk8<^k?+uOEpYfFFrOh7P$pXhDxj*h1q+tPDh?I>WPcKegX7&-X-VLra2 z(PFr8JBUv+2j{!s3-F2pTWxo|8lK?`{28z&nA@|0kGimW4>LMC{5o8(I{boqu}r-Y zRa=AUQB31UlicGeLiQ%@woqR0(f=;UZms@wWvE=7jWjc7DJehy*2F&GBu%`yx#^2x*N_M1y_x2rYwl=nM3Aew< z6Sc@Aw8-UJ*I-F)k+Vzs5Ni{%X^=xxLCRoeAuFr$D=-=WN;84?G~dkSY~Eb3o^c@W|<)<9+tK6?(P4I)1ot37H} z410vYbf4Tc~y16y0fV#`X^O>I#lzIqXW#eg<@tIc) zjNJ7Zc`*?UD8re@+|44tb8veBz8DtN%c(zV59F`nL{OA1RA=tK3At7 z4|(HC-DzxPjy62x&fLo9A=K{IK#D{bexn2OSf2W(lOd!VHx1x$JB)6TF17DnZ>#8 z&Ior5g-B#c9{o<%rW=p)qT^?Q-oTc_R}{UaU+hR8aMK*D_+nnsPfioQ9I#Dj zGwI(R?~VG1dwGw0d2je7cK&tgE0}k?OCtAt{aZZStaR;f_dop29vyV|ChgI6o>@eI zfIf}XeV6mx4+!uz9;FEqO7s;w$d?_hMkMlZTmX@fl|KFWOmF%T6=y)b)nL`@oVg)V z++Bj-IMs-#MMHcdip%>HPE0oF-Rt7{PnrFBC?>!q8dpF&GeSF$IQw)8>7>u{V@Hbz zpaTq~)F@+X#RFg<4}zA8+(5>h?hix_64S@U17IXXCwN%#0A4bK=U?cMli@cVXXt0B zTT^d|a@GBXJ|X#o-#bF`v8x~?6%W84!KJ|n_P7zGift;s4<sdGSAq+iItCv-& zPhueaU?Or^JCpc>F^0>H6n)yAK{!&%c00M>r*tvnvljt5T9!+WX4k7XJzC<^qxswH zemkrTMUBK{bnctr^q@gU+tTV@JG(R~ph4jls#2c|3^cQ3C@z_iItAW}B{zksvvs-m z+`U8zeUN{~j$1(Fo?S%QS!~2v4kb#iDA97pkx0!&^$G#EwdR^kR*8c68>H?dHcz{J z>!BbAh}Ut>37;RzSga!zlYLc)48`ypPcTUQNnYZZ?8r;qWtKx;Hi^7!LeG}S zKaePcYlOV~?tdS7dE7fW=H%jrFfEB_czN(P5GV9`C&zMs1BjB<;Sr)_eSyPoa!Aoz zu-WeOg@Ee6j~Y#v88v!#p|I_Mgph8qx4lshxtDqF<>}#0Eaikc%PV{>8InwuDvx48~_pV2uBYp2RE&OihH|m@SKT#!}9IKTk z$Jh4$g7D7-Nr}|`D`44E+k0ME+Z&<}(C7R&>U(eW^*2|bzqw*`q_)9uTA1Gh!*HE= z(^zM6@>c6_5T^7I)|f*Z&CQ(h^z|~#aF%d=6hS`MRK zl{%q{aU_zDBudu@qSVwCEZCqCvE=pTv5T)~!H#Ibl4FNdl{Us1Xd-##ut;4ynekLK zmW;-05A=&HY~go>cWeJDui}Ua%gXny?_cvlWz{~{-$Gbr%Y{Sf@s4t@7>zHf?{W(j& zfZ0zt9vSPK#A`eZ*NN1uiMsCRqd1dSb9UB@_s?e!-FWg!looS$Ng{I|iptJd*#TX- zIf=VK561RyA%Ht~fo|j~^-h1`uB3@QP~x*2)NTfor*0puHt>iai_uKq*LGf6Zf#I+ zSTLTF-s35GljEU@%y@tN`n#xlrh3vi)6ysIHAD=AjmRTBTARE3lvM>(e;)B(==A(g?A3cU` zQXQg@IzSd!k+UWaERSE`mkDGRt#SH9i zztvY*MFn=MeXt}ndD7Yx@<$z55vy`~wo1pzfi{&=hDFcTCvyjc5J>QmDELpw1e*^m z7X36t&&hrOH~mBL(w*_f?*6~U`591lA(s>!DVWZSY&w0m(4ja}h;vclCF(ts*)zErq&|5Q^yuW~A(-(N#JV5B0x18B564R%jn{VP*Sw3r z{c29-Z~xinWZJ3Sz+n6~yV*nTvFc*JGk0~gGG;XaNOznb%)G&O_QQMD3sm4i@x{6L z>`O0>mIr9ko3<}-r$KunGg(cg$bh~)`;zxN`%Swff%1#|@;olcRPE*X6`%gy8lX*L zEGeRP(*ZHCx2q$!I3AWth)HNc0wznmX(afSd#h!VEPhuEdPVJT=Fw6?4K6Fu0sStK z$8AZo3u%2VsKfBBj3{f{3F)5jK28|#do?nO7c?UxDtcth#JpL=-7EHH@Zr`y@9c-L zl(ZGRtXHQJ1t_`LJlJNPLw+7~0c&sh_&(}imY(od>kBfFTlN&9n8?C$z*8`tBY4jz zEZ`GPoXwf=jRlyA$5Zz#B9Xd@5n*Inx_LHAv@K}`jIK!CP~yKyUrx2unH(SeVn*!9 zeJtixbQ|))#uT5-Q^<-Z8{@jd8%Sxy`yo&vm$@Pu9`vci+jym#g z-EY64kYf9HXqqiP?kkbcP5xE^f2V$H&`pseYxutjdoswu^|PPtC{Q^lq#-kJ5B3M~ zt!f|1r^2A0sn*Z1Lp##Ke_{a4!rsna73fvMUbzOnSuin2tHo~WyH@SmVX?A9v+t&L zmTX4jRXiX-8{H46oxfHm#n3q03z9Ncx(92^pK<>6r?m$5=7!m?jcgDc>fW%}^i5UX zm_h_tf|4E=8zsux=bXtFnaH{XcuYkk7$b`|7L6~{%B>bG0n!f(q%nqaP^}On7ukEx z{Pd+rE@F&l^ARpsKT>M&;0rL0OfmV1P^i%fi7uk}2CqHRh>y}6^D<`S)ZpFCLx3S(Q8|xboq3X?5-sCNy^d%Yy z{q>7hdLKPJuJlkvV@JP=?zI(!xsUH}Gwpt8|6_$6t=!wGq;RiHa(RZ#*(*Xm&Yj^q zWrarNMgz{D>uR(cCePaJa<+UiUomsEk zuend`pOM>hG+x#@``)UuM&jA&(-hr~WOiXNO)CX``MkE7O719qB<@{}<@QE!!-+K) zT57oP_WaS(f5)|ARfO|SH7o|P4M^XLFSq~{d!%3F z?pDgilUpZvl^3G%>B_e)9FI)sgjPuI&F=9_*yGPrpx>|jJ>J^AX>&*STDJn);~97f zwpy^i*Uo+ks)PN#$@cg2f5H8|C*ld2PVlB)C?$!^{;=alhYjrR5a$ep?_EbdJ?%#vs$v*)_kj@-9zZU34CXyC~x zbp}ModDpQcw^iU0QPI7o0;h;LP7yiwHrf>0g8puN#dhN>Za12LgkkN%ng2km17_T` z_^sW4k-Gc%E_PaFa-a6tb(uYO9((Nh%H;miN1cmApx;7X#{L@W_E%GOf9=ieujk*g z{RJSyJhH`X4<&sc9&<9w*aB|J z9iH@5ldse`IQoSrk({lIDuX#0SRD{M|!&Z!$( zQ=QFvdx+MQi+V>f@(XXZh8574vbigJmW7&mr@sQ@QY-ag!Dq|$o6l|`(dSi7e~uQE z85m{@nbjqErLS4JLT|j)`bZ}qicha9;ciA5zWL#AQ}xYi^I~gr*88;*s>O+u=~TZV zv*3!X?8xqpcVyr>=-m%4om#EJHXH6+W_rQU7ps+~`sE}VdPQoPNaotLhaj6`XY8we z4n}vi3R&&iL-}*&X|!Z6P)!FiKD=-OELG;k*4(U%G-{O!kJ@UvQLF4o*RE~?doca# zZ$)KWZ#1luZphqN7CZ;To<;`4o55X@vmjY<)?T5D!Ia=e=J8o5Gdcm*dN>)ag0A%0lr<^%q@+0wmHr)uppP%e1OLI3N#JQSjb*SPa?<}`@m!-oIg zGWvJV9YZI0gH95~U;0=aXR%rD_xEhN5(webgP%|E6Q~38t_W5nJ##g?*LjuIKok#} z5N~{1C+I)|T|IuKH}6Hx%_DQ(>7Ssl%)ztGFtVAY2G371iE(chr|L>ORd@G;0qiyg za9rH0d7NW)az4lEXE|1XSJC(q$LhL@+COltZujFC>pVST=P7|ViXr&?4gOuYf)aix;iwCzllRL za{Gdw?Gin^*8i?Z-S_ygzK+#l9IMdxnPYYFvCq>-p;r&TmFFo-syzi_bcq)W7C6{) zBixpYg2TgG?p=T4mMgiSuPrx}+@o(f?e^nsxepv?%l(hqZ)XMjK+%;$`)xfx|ERt7 zqQK7IXYD*6WpBlgySF%O>!@%3oPXP2e#l$_t~7bhs@ZxzFxJ4OC2-_rzj3d(*O=h^J|BscW&FU%gvY8Bxc2E9%%!JH$+t*?ySjWqdDZkgO8EHT3tDI+Qr84{j;rsEEc&pUs@DatcCI6zhd7AT zUBC+n7ZqnJT1hBx_AF(NOvt( zATXad55MYs6Nkkj6V}Fli6mA3&WYtW$8?Xp`*Cg~8ncI`g`xcuL+y8r;Uo?8FRXa_ zE`%Na=wjZ{`-az`G}?&yr^BP-WPsbXH)`3L8o5)YRHT-O*J1j0cNZT=uliocwTsA_O9atrHy6vl7M%Qi=kkihs&**_`6_#JRCgq)o@yDT+%)nTUe zhexdV&chjqv?-;3X4UTaiQFUC$Ud3On_OT2;QD%L-%(q4_5x&nX2wuNt7~~3V!26t;A?`1l3>`VwRYGMB&>?*UWz>9F<5&SYa#UAp&%p z`?k}4XsAryJBSj1a|sE%MQj91`vhysRys4YTL|*Tn<{Q4ZT!Qqs_D-MXlI3iKMcBL zb&*9+zf*;F{9wVQRRcSEqDw2>#T-n194AcrlCOko(J5J*wCn-aNo%5{2 zHduN*dn9I<3YfxNbKSg8zxge+nAT~U51z;e+ro96?++=F40mOdtwKzE$BBLgpOE0f z%3<-+r{=$d8CDTp6dP~+y|B+Y*1z!rh8x5@Ho0(WfjD$@XD3GPS`TK9c|{}ti)4DimpEj)kx6?x%UBOdmk9+joXKxI zU{Jhupia)gKPSPi@o`IvenDc3gddh_Dj3u~pHa&xci^O!jG!fs7t?|~&5}ThI3-A= zZVNxhdx?z}7@}E1(L^)M-NwkB+6Qs(3x|^j8q@u{8%MV7Ya}KNc1?%TQcDFS)t%x+ z69YnglLdj0J7;mC6$P83K&%&!)?GOB6A28MEh@-P#U)YPht?U{;2#8iFyp`=_y<8B z%s4Oz{z1?Oj05T8a`A$S{xMdZAi@QO{_w*+tdPbb*%Ya}l~b)UxdE+@cPkRlBl{Xp zta*=RxVRr7`B~3+4+yhQj4T{M196OIyqbe>XY;y7XXs_3M50e1E@bL*^a)p>Pq-X? z!WHNfE^jAg?Jh^3a0U8=%h4xXfj;4K^a+Z*P2k59oj#$doH&H&6Ve-mi3L}r7i>(9$o4 z(Mau@a%rC&wAjL=zoEm&2bsAgd69eS$uJZBceg*Ml|B0@62im_;ii@d8^paT&T>;8 zJK48IiQfTL^u5f94ZXTM+fX~DvQ>AvszZ)Ch7UuO+0@D4Lfyio z5NcHSXqD*N+-)~iMoPADf7X=8^t5sBxX6@^l(j)orjs)J^hOu?PFYV5cV<;%?lxsW z9%MfTW?d*>ONd-L<=y+Ck}0rOFJIxAf)DchX_~vR!+uZs19{-F68Rd?(3DYamap5g zs-IUw7`sh*O%Gg~HRY0Zt`%foB}7l1a^Y(CTbF35;HZ`E_iGy4fED_|U0w{i`c)pL z=sO30U%9+4`ks5J-l$)LzpY>6EbQu(v%leLR^wnhrRXdA;XEN4_&p$Lzi&XYTm1;X zJxw_a8r6almbDP*HD1c>>vqMbUtR)bA#j1LiQGLGY?N+4CkwR!qFWT{jp%N-ygm@! zf;Wih7G)9L;=P9G?lV?%@In$0-484&swL@#=!#AcBRci?H$?Z}hv@D-&=CY!{8i;_Z%uQ+tA&p`>K+T@xul|XIU7@xiVQKR~w)k zOl#4I7*#xd4e#xsO;t8_U74(WwF?XN>01VS-;zNF(Mmimh3J=C5~q}T;tv1O1) zS!N}?OTG|p@GI#|gS9Grd5Wn|eJy(&F@jjQ!cVdzs1*hUn1xTl*5?z^z@0id#}#k` z`QQqHZ4=llWYMjDO&?o=+h~>ddDN3ENA*NXM$f-_v$m_-q(lQccM|` zl}|BRH-NxWvf`<_;Tp8hY<$JB%%8Dj@LeR}&QDrWG*6lS4LMTR%c$)}P2wsi8?(!Q zBX92`6_tl(aa?Y;PG`=MoP&{?_aGMNdBfq36E_j}>Nw*rvX6prhqnQY} z6&Y&Kr!zl{Ops{>>LnuDywDFWH}b%9{bs&b)=>TQXFQZ-6er#26dtNu_`j9x;?wo# z#^@?2Zra*Xa|aEYnK2SS1c8cO*n|ju%?K#D#u0I^vS|cuTuyx=5%TA1J$-~HzsX4P zL~@FCuxA*Q=+&M4Ix}2`jAG0IWm2?;{|W`zWO^mImWCQs)|J2@qb`s~VnHL1#Rc*{ zjFq*{dmf0@E`{I}H~4c<095>@gGvV9OTq%Jx1{LbNc^=m`j0Q1f0_?8vD9dZO#AxGotfZDK6*qCglEq3IUnro{FFs|R-cG_^io7r>&lbz=ZmY||ukux? ze;nw9-6lD!8J&d~rtCEMA2JEeo{vL@T z%ExR<7SoZt%~=?W$$Vm{9?6J;A@ZA(O`BitZW_6T0HghD#_+b^Z`m|?kqJk-AJrQ_ zR_2zFy%dyO!4p71gOtFJvGN#2HqG7z_kY67s+$%AiQ)J9S@}fNFJJkXqO6iJER!+J zWsJyVjG#$8r8mx7X;>Z?n&!wo3jOBdzlyoXo*$PQfY&aF&7!{_4v%$l$Wdn1$V0}CG2_mypQ-xpc94Y!7P=|fa~)O{nP)@Mv zeU|&B@2lXm+%J6}H_F=&U@7>%2l>8q9j$^PWH$nanC379!mdj`)@m4H3JDluJe+86 z3}Gh{=t$ML)i0j<&Tt*r!KAgzpIB$g(gEQ~(!g{Pi?5m$Gp6kIdsG3UEMe+ zDikVj`>oQRN5jW@8 z&ADhECpwCe+o$L#;d!dzpCExGa-xbmN#uwAV2eEARXcl1NjQ7PTT*mBiGLDgC6Qk` zNu380Bz64P!dQKaY40IHdPhitWd3n|2$62e5hC@lfBthzlqzjg`LOaC7N<9?%+TWZ zC1wOxRHFy1%vEs*D$6)0h`~p23;a4wMx#`3(tf=F^7FhXiZ&-O} z4y-Jo0Q=~_8(szp`R5{64zO6`%a_LT75MuI4s9UY(gTruW(ltgwK_^(v`B`IU#E}p z3J}px-UcbsGUwEoSGg5ZWY9s2Pkt}&!N|?XULi-&6^W-R z^`WY=7jtR%mntx9&C>3L07#fHS{J$N;iYPRj3182p%!Rli={U4IYk5@KJqO?FK>mx-?}&JI8U6lg&5PaN(4y}N==Zh!hzZqMY> z>yDgd!-!w%Kl8eH>B9lJ{wU;nrBKA5Mz606(d#Xu7iFM--wBK}BhE0E^^=4n>P@e& z^XYXWOnr_zD2vqw^m;4FQR(#pJo=%lv;0VwULQj%j$VIQ^!lSi_`W}#UVl!cbZWII zFFSD469-y`j#rm)smrL&WW3L1NDA&soJ~f$b_DgXr$Xw5Y1t}7d-js7sg^bPuI!s% zew)<}UccMrH-~DR?`m9|eG{sYTpLe5mHy^e=*~U<9glGgDq)heJ=WX^| zLvy*qvId`oaFKP^#?FlT?(^{H zM}5{!YLWy7=Tnvx%_s32__k^W?&Y`SoMgtWUJq>bFC85JZ_8E2_gyf;< zP5P3D{@@9tZhmE~>EI4UIO4d`319PG7xWx&LdY2Q(%FXx6&0biy-%==T;b~a&9Xu z`n}ETbV~-$Ct+T1u%u`fiQhoZR``eBTj8I*<7|bw6zH`TY`lGKh39j(LhJv(Tj7j1 z3jdEe_M5Yg5Wdasb#7u z{4Y77n9MA(W|;R3gb2McFXr`u?rAq%F(xWtm8vz3|hVgaf`8(G3L zOD?0}x`vwf@Tj+_WdcKIXR@C%udY6{R9Y&7Ho!~q*%h5;&(W?jC4grY4|mF0wH)ErZKZq;9k@Ui}7VRDl|TOCL;Dpuh(sw`A5a-xUie#68UL{w~Uv9h!3rmaVT4 z+QbihKx4uFlg8q3@=3e-Z{$AHb6!H=pM1klkqHM-aOK_#DAB@xEx14th4m}^NxXvD zrn?gmi6D0Z-jdtHGbq^iYB<<$*1UrKW^gAYcL5f27hp8F6B2XaV(tQr26sYY4qR*+ z_$venx)f6Oz{RJy7@;x+UW5H65P;mTW{~7>+!pgBhs$Fwoa8*LEG@o6aDZ_>Rco5O z)i(#2h35r!R;|orVNPjTsnv^kli;4oB#}CHai6UVShZZ`8=rqiYaE;WD#yZ znDBI;Z42n|3O?{$(n~&yJ*$&kb{|!-TW|;ueL#HrpgX0oKfUaUd2c78mLABx5$EA?B95wtfjGdAFPY}ur%Jl8;rhlER8SjZD}0R z&jY^4GdljKK8=pgSwLTTZuAg5!+^nb z@Vr2PfZVnepwO-fu3Ta3A8>Ic56ALl0;iWjrJF;QW*n=MURos_P?m~{OPY63?Px5b zmqm>rXn_QPJSgNXyL^`ld8@0{sJEmuOWZEI&jIcWnhU9$o1XP-2{jgbJjpR%MV zu1w$hN#y4}hv|k-T<(BY?F$|2W>$%?g^vB3S$FUgLH|xe!MIuQ+{*F#XyncZ?aeiZ zlbfBJ#Xh-NjPkBLY(HzChFsWcR}fTkXdAlCU|V6oM5m8!8|7;Ow*4o3reyFT&4)*D zCXj6B3_l(c;zVra!}-dVu)oD5 zEa)d<0yhZ@`iWT3Pr`zJA{O+M+DY3=_|@p)bBCTVVT z-)j1Lx~cM3E>~}>m~{SiUJB@xvuahIXD|{d$t#DWmZ={h+lFN2@F>s2{Ac3z*2_=U zLCflxft05<5?;L^i|e_~8!F@V6TsL+6?HJScb&o5+kR&-_WQ>T#s=^U<;)-Wl>=kL z2Zmux9R@Jg&L@OmY%@RmhB4ENaMy1RjJ>}%jOj2xHgtWWPw0A!z-r`)y}@c|2&@)! z8FnA=bP)dTF91(pQ#bg;upmALGc1(KtL?&T=T?rh)DlB4-X&vK+In9~!U~Uju($dR zB$5YjL7>`1Y8VuUA~nFVM(VEA>aPlnD|K7=U0t6yZNzIVH;}T^VZyNW(8CnqC@rTA zJOrhjP2@whVD<7GMsA7?R-{%pcZ&&l(3qHfLg;k+fdH|;Y>F!oVAk>l7vF9dA1pFq zXAm9?%+$uMb0K*hjtPY#`W-v-Bm^1k%-X>IWhu)k_A-3_=9H(pj9voH9Kv=YMwNI%n`wM7UD?m9@yp_jD%C*dWT*t! zCyj`Qo)XVHuKp!w!8k4w|3lUE!+0`R{6_0pne2$v-OIp}#%o^Xz1O#6bS{rb*9|Im zyK_e?489StB&OpfX$lFvqPn^iLbe=iFeqa5WW20p-l<%Jw<(@1cmyM{MA?CP&vXof zo_y3a!$otJh3LsA0{Q}OIpBGV8B-tt!fCUz| zvey7IG0^Mht?2msT=-2GC&2C^-evm{^ydB$I!^N+dcYg;i6Y)KW-^$Q`ZgEjD84DV zK~bp9=D8mQpzU$$#%fc$92RsP-r^7Nm=}pZmfQmO^n_CZ!ThMZmJp!LSCuh*1h*!9Wl%&v3ly66K1v?#mIPoZpZ-M^CD7b9lA zx#2w#%U{D-eh2?P`H2zOvxcmrGbR+`>5IkFXN;n=uR3{kjm0~`aFPL^oZfyb4jodg=L!ikX#PB3|%7c zOSaCRhONX3cVw?pGJSn~`a^hp;tbnn@WcK&L;Gh4CMxsZ9#2i)4#FKIF+rm2(7dNR z&Y_=yyK7H7=iE5N_uNUf|#a38P}u!O+gry=-mF`)I!Jj}5vy?LQ1% zok|k9`y-q#=?!RbZP@974AVU=(tu5gM$74f(JT`>-ry{%@(fu)^Nt`3p3N`?JR7x; zBEWaa7|>c`820hVuY;lp)v~O9B!62}_D9l^G_2zX`nZS#Bn+!@m{+ zMe@d;bnjVN0_7<5$!kL1Z#}(xkDU>=9u8y{T82*+>~r=r7`Zjb%^IqON(V%R|6f0*c2;$GM0~sXzG*l!O(f1b-Kvlj%$QgKH4W* zxkhN^EN46}w1S_76AUhAgo*t1gy59~>T)E5ostZ`-!hzNP#8NC?-cw}C{If#9^7xf zz8U*1H)Rmqdn6v*k41{?QDnAdHd-bhjOWM)<2mxdll+3n2OEchz4$NrpuZmz$%`Z- zZ2qNf#CBs!2R}fP(1Jz>o#8>7W;=;rh)W0reej@vWHjv2HB>0J-_Pe3y>EzCh+psxlTv1=Q@~>Hebkgk-_upe;40`lRqC=- zB{+U<+1hzOkEgC19lzkZ5h81;@>{Ba(to9zUeTnl_vS&Wyw8qMM9~!d?j@geEb6tK zLWVthw05g&?H1Qs|Gruyc5&78^Z1fLP}+(7F;XYT9gBhWz$eAVgaV-k#O+UbLC6gi z$Cygj;8Nb?-I(1!n2iN8fAa*&Wdb{?JXE&G>)iM!qDJT4nyaVzWx!D#Be2u^LhW~q z#CRip!#`rrxG}BP8^-UfYhzf*~oNRp)*KW zq5t?QD+I&gdvW@U!0JqtH`c>zt?ZNcXC$esZ|1|}sq0zu>w`7l^lw(GiG&tEc9a$q z)29`LmZ_b2blyVDrq~!;t+Q^@r{6CHSf7hFz}~M^WoBp>N#BdM;nAE$Q+b~?>b+<< zjLy65&9B?%LtS)y*#8KB?EctTy`%Q*R!;$fdMw~6)~;K?irPCAe_;#@#A7w0#zQ=^ zdv1d_~gar->4Ecer?;sMO z<;VB*h87l6yD*l@PfQ<;adc&J^)BoxB8#R>r@`byikep!fn{Kyn()A(4qtNc425!| ztSRnYFyjwpf+j7Rxz9*%qsQYun5S*%C091fq=jPzo z=l+i^{WB!M*&5Eep1uv>*SX-=27ya1e$_bz>)NcualY68yS4T?V}J+8NdTlzTT(Qh zBmgAUH2ms_ZqJSrl&NI@wE)uJ^#-IjgkKN+W#H%Q4t}&E=|w!}Vm(fIIe-(et;hwJ ze6D{OyCjlh#D2v&twAdv|COPYi%Ecnsg@LtA@Qp$v2)t@v=;%I@w9h==L1YBBpJWp z+JHQJ?=ow>gapX_%_1PT7r|FBJTZMPd zP2hDf+{1V#WPQzL;{L<<&l}5mU$56O@Ah48ptWn!Meg(m9aNqDxZh;ZLvYWV7aM|_ z+xjMyKSSVl#hb~oN4b?H>!X&tY>1NZHJbI7gW8%GuDeXPqwGT^mJWSv(6wC;=vP3t zIO~N`D#Hl3Jg|vj%zq?Cl6SX>bk+Yga_Oy#baZeMW(Q zrnl1xXSz%$(Xc93gMXMW4?5rowq;M%-$#~@gCBFuWyk+DfLTWZz&vM3(Rvaa8i%=R z8V>$GEz^>ZgVp$73l9Ddrnbjnetzy@o&(Q)`H%i3?L{){j?Jd-=gW)K59Ac_S*X`_ zFr=y`aw4~yc-uIhXa38;V3;F}w>w^TE1B_Ra6{}e6~8I+a+}!%UuT?HRSfCA=*O5h zmJkhH{UZy%Lyy_mwTYy(7z(bIkMe^H?vC`2-2D(^Vy|Gjbt!t&zn4=hIvzAJ6pKeG zHy*Qst^tv|?^eOa?tTex&}z^_Hy4c&VxXTHIL6IU^<1h9kZm6d+DYW(pfbRB}C+0-$pQp>Q;tFMs(sZ$9@Zcg_C2bbo zwePF>IIRTsp+r(rTup?i^ICjuUL-o9g*L8l&$JOK9#2m3)#OAcbn@r)@GCNkPwl14 zlP%^s0sqXJ6|}HeYh`X*@PwIVZkw0R%%QU?f7~&SFaD?P`}HKC|K}|!YEot(^G>}{ zx{GzwSrM$;7-l`luy?Um&5=jg}PcB(ZjS z?9`A7{Ni6-X`7{=`|OK`r#;ktNbZYRIZvF7hIo_g?Mgw-t8+5Ccfe4Sq*2zi4X zlus`L6Rla8XjfCHHY^$ZgzM(NEGgPV62L?l2bhz6F3w&x@pv$y0;wg!0l-Ad(O_a< zE=)ZCR=~s^ZwMy-r@_O)@7O|}YFzc;7vT$mha!Ff4=;&J{9`bNG-k-(=Sv9btt`>1 z5b2OLg6ESpxxe~>EPbioI9zg{V@zu;8T?&0ocWd%eT^i5oA8-GQ|;%%&Ht%74&2nJ zfWsxguMMp)Tyi8AZeD&X;HLf!!A)>p|4)OT2OR&o1-&WCkDr?Qbil)w6y2}PEd0D- zd}5$tD-HCNJLp-^8+z;n!C()j_0($OxL(r48pZK2!KesJ4{PR^)v=07^DOv}3PTzWq zGPCew>wSER1!0L+#MT<>#oP`mxc(6qG*WjzItH1feyz|qM&;PrC9Tf|_3aX5WweCO zk`#I4nMoVqX(VQSI%7!yN5mLPc*D!NgYOS4LSDT8N^63<>VxjVdeaPUS7x)4#zqjW z-QJ{D-%No-DfrJkm@-~V&i1rsMr6^waN{ArC1-8=EizLpot2m;GcPU$HhTs9m3|xY zSE}5Mzf!>wg*htQ>D!ln4t^cuyVGaon#a}YBP6r2ed?%%Gpy*SS503!IAVg_z_SIa^9m$L~6V9HD0vA)NI6KtlLvJw^ea`Jy2gb(ZVTA6BF) zXLYzx{&PNA=W^3&vh=J~+9=&+b9OQWLYqBlg1 z15^0fNb%eG|Iw(FvJi?}B6XSwS~Wh5R$p^`*dy>^&Emrz!2&9=3F2-6<{qBM}kLV)CjTdO8A1vK!nM* zGKj55B5I*J%#%padsI&%z4UvtJ%RfXB3ZHKR(ImD>guImw>FQZiCuvFfTZ^Z{X)Hc z@@x_pPCNaT%tu-sHfTFLF`8-7TV0~Ay_K0Pg4-}M%O%nTFS9;{*&VrB>s|BN$fApF zAQ?|WcU{g1GJEVu^LLy+=r?AsivQrCSjzTet)`*=2L> zfB!v= zbfL`~3;MPK=}AG+^wiALy8?AdS_g$I_p5*pNUzU4-Hq3Td;4*o(ldvY)e-E`s z-Ir`u7mzTCr`^(*hS^y%*sWt2GfZTEqWG9$iMO02;oYl~Gm#t)=3Jc@j4U_-2{k~L z&zD3U+uZS8Tg4Mhu|429e$o3O5`S`XWRV}~z3awZahzRurV3>E5{)Tm^93>3pJO|O zD9a~%?T$ZL#&P@@?CVFcjo)I~#+i%RQ#tY1d&)CDj5!Y5>uS^64wm|sy;bGZw-+ii zOFs(sgo+h={TLcywp9iedO+PNU$oBNM#8!;|MW4GZ2{O#b6~f~f!!*BorAYdwv7)p zfxfMaEFa#MJGT6GO9p>~gwOiCB}FNc0N#W$0vT!_@OG&3IPlh@0vS$5WBMDs9TVO* zrVIq0F}8Q`uTAYbV7t@4u2yCi-rgWO2i`KU;OpR!whoR+2e*12IHVv_zfGvbQRWbU zXaDohCUDFWv%O?(r0&D80s+eKDtx`#V(_t46m}V9v!brnK68X~wgjcxL6mAw3u6#_ zq_GR7+Afr8DAk*E(}K!Kq1KH;?S2(%>_VYdSTBWIW%3cbXU;;)+ojfXhYt+Co>1w*?LwHSXZw+%xrSkN=G zoJ<^va!XDlvoM=U2T`JE%)9rd$c>!62j`z)eW1N7LDRB+1DduQ8|@Zd-J<6eXl|Uk z?U73Srie$9C~dIsIWMUkcaI(wh(QkeDcnN+X4NN{yLm~Y(30{}pNe@qK2TeRxY95g zyI7!!DB5mp=06ucS%~@@iI}G7ut75}eEZ?q8`5*sMruhlb|kVoRMPl@LbreaHUqTp zl7MS&zpM8N*F&UU*88}rzf7QUuUb7Ot#=9KeCEsW?eH)S=k#BZg==)?Wc6OUl)+p} zj<5HEw2M}YzQdi(UHIYCcNt%{Ez#q4AbeWCVCdavzs6Xk$aK^ znK>s(kePFm4C0i`o+KMHCrP1B5^&f0Ejmdyx|2XB$=RBlH+GUds?9e@C&^~je=_$Z zkrP<>Bq1PibfQj@YMmsUA~$jqpamPhaT5>GY%|%DWHD{LDG;+EO*Rno$8>BE`y&P= z5F?t;`x?zqR`CZ;)b49a)ve;=wGmWlrYH1%~JW({PJZkd4$fd$V0 zF!NL2W`18-#;g@(&=sBGP_D!uwI!Us3iKZOW`Y(#x4#XBR|YnM>NTd5bAA9QkH zShxkdd&xE)h9k>W6pJ*Kar?U4eZVD-Qa^aR?YDho1}3g@p#>pD>V8E3Xc3oM6Q1i0 zQcc9s!WYO4o3}bPJW|5RH-$?=L_az6)*Z3NBXHuo;ly{u2oNMrJW^5~rCfziLpk%- zBQkGY88UCRyH&F0trJ1*CDkLSH;Jd}jXcQMwR-Ju25MFU^Hz}G6nX!PXDXT6seUXD zKsBbRC5cX|PD$+X8z`ylRD0alqISTTn71A=^VVjONHT9N=%PRYHnTEqEWyNeeS^$f zVaB&byhWM>M!xK_5vz%|2ZPmzPa>{_Qxf?BE;&u!PT$hV)%mF-%%DQ-BmjTpD;>NGQOmHJSS zGY%d+?kzER3BrxZ&Uv+f1<;WWgivBDjE(jdi$`}3e+EA36R4g(@QSXK)eUr0SbG`E z5>h|Un`Oqbc50b`p~SnrKc9=WY7#r%XrcuIe@bFAfB9r@CKUdDnai%pn9C{#+n@29 z(HYiv+6UAxRdR9ta*|oa@b@x1vJUoVJozPTyLu~Zig+yxdtY?twzbHrH&W=I+?w8*vH%syU&{NTyMb+ z`!1P(^*c<~vwz|aJD{cfv+uAU(CYt^UD2iO02){F26lyt2fIQLY0sQZ3s{QoW?e3L z*9Xth?kGCp10>T6zJ!dmyS=Htfx^rRN7b)+qO^9<2=(f%)H`;NURZnDt$7GubH^1~ z`0zWdmcKz&!iuLKB)_Tt_xpn$+IhqVyZXdkV=hYj7c^>>rkRR4)g>(hF*u6MMq7n#;a_tE;?K3bn+t*@f0oBLnz zlshweN9%f#X?!CJ@AJyC$R`X{pG+dL<*j`& zA9iIKWLRd1EA|L;=L5aHxxn{ZzZ3YQL zI|6&uTcWyJ<(um7V}%_M{3}lm2v#bS2~>_h*6INx|7C)pw0=nMG1p$($Nrd1UiR1= zea!Jb_zyPT1`@`5)v?Aql`*;TR`cYKSDB1gIhpZ(X{j4;c^~5yk=%2~m64Yj@9YJ^ zH&cmha7VP zYd>xi_(c*Xut;O#bHb5XFzC^OS9z<;dBY_YF_Iwg&0@`;sP|V<2K5jZopnB(u{V6X zCOvRvMW{hM7F~LWoV0)f_={Q_$z@Avsw#E*Q7*LocT+YUINm+B7o!_H+C8>V)B|3- zV1mRU$GFON9383Trrsr0@sGa5_9ZE(GQ^-@D*%+D-@abY)*Nm)w$8FO`6x-69+t!voth6;2t+5HO1bh&%Du_zds%+yUVwLca{J-BdGyCk5 zbAs5aZSVi)^U0an^PaWVtTm4{Yr^;J=VN1Cl7;WtGcf2#qOlH~nfL4`V?nkYe%`Y` z!{{5T`}GX&>wdk?BKPZAlquQVlvnrbrB1K08&&K3_2O0c>z7IBiaI(e_vpwIJWZx@m>iv3H{nd;c>1dBR?Xg_Wu08)Lv`^#86JPRznu?Z@63+Z8uVH!0OkcX6+E849rBJ;Mn6cg>vS1F2ufFcx(UAe~> zGzq=q=XGhotVo?KoHAE6}fBgIA#OECS3K@93i`+vJ)BD73Blb zk-)AfcOoOkt|%0lT0$F;SnJ=CD_BvemgW#?=F^k7wA^#mSw_@!pG*A|j59zzpIffqjwQi@>BfxrVzYZd?j*SByqE zy;gwlgE-m!(ZdlZ52mO3r^Six-@j6vyg4kDx+x3}N1QZCzQ_kCP6jO1)P30EWXp|0 z-GQ0ve?pv;lA^tO(q&kj*lE1&km7{NH8*ZzQO3{GwZA@n@&Ec1;nJ_b0hj*P3~*`e z=k(&z&5BFsx5ht%!jwoUfKQ7Q2BQ58k%}l%ejO)x^5T{6t`kh&cVo*{V@p+IAD)iJ zVxJ@2*yQ$62Nwc39EM}Ik0NX*ImZbI>@^Yn+R${)k+OYs9ui=uLdtMg3`J4Bn8#)u z|LVD@SO@QGE}DD{=AE{W?mk}gj;(siIGFDWVk+7ko{H9`rxM<=HDV^3Thvr^YcLhv zqNbu-i-HuGit_!JeR?XYyZ5h>icLdP`NrW&#kl1AAf@61OElj&Y^it~bG$cFF-+T8 zhPE?E#rt5Ru5YQh60wkqQh>W6C!Mh02dVhvafc%n?@mwkPfJDJzYJ2b=!05h?HrOy z-G?g`e<}GsNU8YB^_sd5TPpsUIo_K^mT+2Fn*>3IrQ)=ACs3H&NJ186{4CuFn)F51 z4qK$+<8UAqFTq-?&qdY&?4>D**bSeShzx{8WQbHkiMV_bL6aAs`R+Qva5xa;6P0V-B(C$hL17Gk*|*X83zb4!a%5E)w`&1 zm8vljzX|2is>L+8yqQ${80sOst`vBcNlWevTCzIXl89;vUhAMn^#ZN)*pZIZgH&<+V$%K3~2(zHzBvwA3xid_Vx@G*wHiy%#J{2ezP+ zT3-K^>}0#?q$t3^Bof*wDvpJ1RxJk{cyT{m1{?sD@BY@38xi8o8Dx8v>I#cI@lxo` zA5`<=AUutlv^QhBZ-8Z$Z^yR%Jkf4@Ro!3NH)w7JUIEAM;`Y&Dd#FfU235XkW$pag z#-9%U?BWmA`^u=*2NgSR^fh-^<5EJNx{{t~;!|1%GQ8Ps{H5l&0NX?%^HWVUMQYM? zh5Q7x2`B80pXe}tV#xSs!f&3|l_NNP;M5&Ft=p}h)@7v5w4zQj?Wh_@9MNC0t*Y>{ zI-Hf@-BeFP67!8URg(X0z9M?tbGLqV91oA-!Sc@hySPbZY}q=2A2 zwUMT63ha`GspGS>-Z0XDAOdnResVYCFADi9;WuEKMt@&mVx%d6bZ9aOY4(+gk&+37 zstDqSb)#|4dvV$HvKeKUlwCRln{~LRwISyI9VWB=$+w3`{4f6&{_^CDZ+CZoSiRW| z%2@@aTdBb4f+K7(!c6Oy(cjlmBO^_hW~)qA?LinLB3n6BMn+0Tza6P@%MAC!{O|o7 zRmnv&w1Kak`nPN}$;K|%K9y_7ZTeGjH#7f1zB(Kz`k&8Xq1?#~#VlsbFvR$$L8sa; z!cR~e-?Q@zP+Jhf=j{CB5F+4RhmzZwe*kg?A9 z)erA7sjh-ANF}XXM9_KTn$%hK5#r=FpUz2Eb`u;QQ!&_uIjR3e!J7ye zkiEZ!0C0oPyHh@mo{Rr|=`^o10wEnN<_uM}3Ta~q1)gehp=&yJa2X|aQav*#}S4+12In^EBObmEZqC z$LJZm3OaaC1S?FQuI51x0@H&nDIWdqb&&GnNLaUiu>ADCsGG%p9=u^5Pw;IX}Y^LHWLO1!Z2q zJ`))KDq_=BCdq%p7Zg@x3PZv9#%~DTK!JA0+&BC+kP51>%jX*3BKVT^p^z+72>e}; zxst&YWC})Hhl#^P2P}!}3;#=~AOO^2;7BqfaUJnBDu^lyMU^t@_#i6dmIseN&);F1 zd{2|{-M!BE9$b%7PF0=zW)OeHUrhX$gOs-hLUJVptg6?46dXfkjv$Nw{buu7hSYv- z@cEOAO~fDILuN=k!?XP(&HUd#_i~f05WWz2-JSk@oM{G=DgfIrL-9e#VupM+sBp)l zrlj5Q1yCY9rM-mA8MySX8bAJVc8q#hikJ`JNq<#XWkCj`@yE1okE*Td&m z1Q9pAXd-?FUr>G|T>fvjn>1&tTHPALh^Y+wjx)RaSxrP?}borZZ0|DAxaZ5Z4xtdtjf+f?1`Ze`fg^ zrao%WHiv^bH^fB6p9$CRM2Y?@Uo%y13m5xSop6Gb)2fj`KHz`i@1~a=XowFmv?S;o zhgmpgI$|!X+vfE2oOnS`Pj{@R=XW@NT7OPY&&AVvdKOOa>3QZ0Jv{>+?&-OHb5GA& zxF3i66}Zp99ovq#;`DlLs_i~sc465CWmC(}KhLgtxd05sao>(57UnpK84;&sr&Y6< zbB~fexa$r+W_uHJqIgZaaE-(FF7^&^yeZvyOx~(F7W3A#y@3xQHT0OF{nF~VyPZ8- zoqqdbZaYi^4RCsz%id}pWYsP~LFMivEu8~;*48{X$lkL98I-(C^t0VTSZ-tE04hd3 zYpY-JFGOls#>#REA9q@MP)e(Mb$wjbao|T-@e9OYNKz7^)x1~)dq3PgxTi<`S-5LG zuPEwPx7#iI`{V6y#~Q!W!9(V5b(@1n58SEEPRqdo#k^x#_7`@c`ozx9N%}wQB8I0Y z$HT{>wyjZyY1_6b-iSSpH@MX)*-(8F=4p#6Y&W*r@g`z7W7k=ZSAGOM9k8g;(d`tj z>m10~nEQgAh+!wGy4gQcI(vle9zjSuZbgnyA%l|6@dkcg?048!1vWB5HQV=qDEW82 z{c+g(8-eY|f!lD8o&`b|4V|&wiq(c^JBjKn|HleRPR+j4uf8C>f1==@D8ts!q#Qee z+o0~G2wc2jGzt4hW%+RP;TFIxfLjE&2<~XOqt!M^YboeqZX?KI zz{e_n*j}tT>QyvU6mOLJxwAAHNQ7=r5gaFRw3E0R&3w}-d?@C=?6e#hpwEMGjicE}G+s@_TGCV9Pz{_8-c4R&JcO1luRE`JGRX}9dd4&A-YE9Z&+yk0| z66@y>TMVO*?GB#Kv1&&!F%oLa43l=--t^bI@r+B!HhF`(i`swIjc*e!EKg1?P~Ij7 zHg=66u;L!M)Ot2k$VjjzJ%OvWcx9YyWB}L*G$G|Lc)uH}d(?D|K+_c}9K1K22L(s) zmVx9g&xnbzZw2MqDA2BX4w~Ehp(fZp2R3;3&PlPq`CdF>{pw=7<~97U?W$fCD_H~0 z#40=;UQ2vpe`eHP+a1*{23sGW+f}?V^e*olV6y7WB=($=b=K13bI5L$e55Umgi?kZ z6DQvF4Uz}Aec^h{k5}C0!@+212773;3pZG`WU#mp4on_QV)8MA$--1jiV6Y}3dR92 zJQy>*T`;+wm^^vksrgHA~c?ru1TvL zu#pI`wl|}CIBuoHYp2>dRI25jvr_>p4_ZT$fk=DU|#!Go@cLr;_O3NZoeclE|`_{F2GR&S_J{ttXwTh}xSG5p#FJ zR4n#994N}81Vd-Adsp>HH(w`$dhq#M@n-%0QtKAj8Sk=gS?iQMV%@UFDcOyn4W+d^ zt@tNVRB8ThDH!{&G51CA(3rd4ij$sULT5b-H|*$jX!D{iyP>K|Q{FH1mwayJOxC^SC=ARr02v;X%Rv7WU(?+s??O% zc30Qq@Q0vwO19WofhsDf9^QE-pTSJRrx*VOfeh>tWqjBVxac7mrfI=f-oQ7YRt^pA zxjP}!?qIPM#m$hBQOsoACtw3yh#d;n5{E(p^0Suy3Tv!ROc#Vtfsj#(z`rg8|C$W`CHm`zV)AH{ zh=h?Qe>Q~W&)D6zJGM)s7bjqPQj!o3WDXz5T+HD^+CdE?1%+6)kR@pU!o|kZz+z5< z2wKT9hG37ZcNsBtx@{*GVnVLc!uUrYY1M%#=tWJRZdk`jSjrquNUigWn&vvkY7g2c zw4+a-{tY{Y7N(90|H@!T(&cD=v-hYbQ!fL$v;}9B}@29T+)ciH( zu7ms#$hcFNVZLs=3m4-;k{*`ky1={~d*tV2+F;%JmYLz&-qd!pV`nEmXD23L28)H( z2B#2g<_#>qf=TQu+;& zZvAKkI^JYXm1n~nbzgPZA-A!J5ed8k>;i z%0G+6l1#gtes5P4V?kT0jPzdKs1js_RHm z7foQzW#>c-w_tWA+!5y_5L@Fp9pX)cu@}Q6Z(`~y%Gp?A@Cb6EG7&bIG-ENezu%vk z!Mc%ZAyI(0rsJSh`wKEZSKW#y>yjjK8ai36*&*hSjWQ0rQ5(+j#=Z_YL7+I^FfJ^y zl`?$|x*!1HQsb8RHHd{3nKJ7ZzWXJ=B82h&2jp_J)r!WN&GHmldbdN@@On zX#vfGp%g1V9D!oo4s8od=7U_9ZP`V^+^>v-J8SM4;He*m@Y{m+5>I-dAavLsm<4(Q zoDQA|_@vdLC*aE)_IlZBfHF%~Hr!7QxHrTA<@3R4A+}}XBogdnK-FSY3y``7m}sJe zJKG!ET89cM!A38F9izyl@JLPcL@qI3^h6>$&2XIrZscRy|1rqqd}tHkzZL(m4fHEi zJ0DdzFmms%tv;divf>?`#}@CORvd zWgl|(d{&o%vjbu8Po-v>&6C)*o$Jl|ER|o@ygWPVRxESe&DcO%jJ+gqqJ<4nEZd_a zKi?<2JMAB0cTu;ABm(ZxVAssgfyUQv&~QcZE78Ph@PHc#ivV4L3z372Q=t{$E?H+M zhV6BT|UA$_ey;HGjvO8jz)3ctfijJ9`Gxs~4m)<{A%Ge`##_nk6ZL-k|YFc>M zCNxB>cEEao|reO$0_WBt+qi?cO&vu6_*w6DT9)ivuCFY>9szw6DW`BStxH4 z*je?f;EQ|l`0pTVNiNFe9K3WqflY8K#10b8ci_9>*D` zr_51P2L265s4p!Uyhh39Cb!TNGthtuXg~!TP=N-}5+0@|s@4H^>jYsmaD~xeqgqvr z!-6qok$Fej?od_LF?LEFGG>sv1I;v7nwr^U81R9^{z1C2tfm(|=a&tp^x_#c>p3AhK%PAyl93HL+>fH<8@Yl1@wxtR>Z8$_7$15s$O=vYPuwEJjBM zS@B<>b57!>5sQHyCs8|M8PP<=*#n4A6oa*c!%}VbT6{;n${yJi!FEWFwd7m`sm+k? zC=|SEUhI}gt9CRZF0;O|A?n$C%3W;J4!}0;Tim9-)~nnjpEb{7j~!F%*ESZvrR{gT zVO@3p?+4;{`tMQ-n+oq^tgk0w$TINT{8p zM2tDV7SXH<`-Vg3E->SX5~gNTKU8?^cUkLqG0{HQj{ohpcL8{WL=9wARH9UaybG}9 z-&ZcsZ01~?rI#G6z6qtnFv6Uc$?(9|=;;2}z?bjS-&Xo|wLpvnw7IJ9Jf@lVD zR1!!qYXV1+7q+_?l<=mB(?sgv5QWnT3|xq|!Q45%ikpi!7Gt%G)vM%i>m@080CRwq zz>y+NrcwmNX5BS{OEW5%T?Y-SRS3g5-s!pnSPeEXH-v8D9McaR_FZ$7;d_XpKtp<} z=wdhzRsASpHoSm`FVhbRN_eBCz$Vtt#TT4T;IuH#=ujUdH8zWx%#BMXtmpBS(uaHm zIJ15%eUQVhMdO{s4@S&HmzC-`@;}wWS;grIJhWN^3ikkWlU`^n8S*x z6XnYf*t6Pzi3n>}JhOO5@m5`JL7Y`$k5bg-*>0wT>q$6F@9Qa{#tiko!P2sjh%Acm zE`@p{;BD2;M}6GN2ge2rdz0}}i)=i&amfn$U z>|);%s*7U;NL+uQ90|(lJhl#q5IA^^Osk6NX^oZaK{ocyTCxwtcYgf-e3Yu&q$^wR zp8~GxxaRk-<*OV*u|wpbP4`6;3!DN_{4Vzlb?Rw0O zbzf*)*ohS!A@LMifK@2BxHXSBLVv<6H|tQ?GC_d6R$;? zX_32Pu?z$~4?EPXhzSJ_Q5SOqH3m=~CKI!z{i-)(1QzphWnLvgIbtbUdh9hasT5)W zSc!nxtj2as2i^k)&ifN!;M3SA7&T1%M zw_cLEamna<%#qTKA_Slt5ycn(SvfRYbz_d|Mn1|$HyEhtuwH@^UIAn98ml<*(QuR; zVsxkrlG?48WY|(?YS&}xlrBUN5StYriY@?lSxjX{l^iJP#04IsC@sjl3>r-s3n6!) z_N6n+>*g#E_T}*v6sF6$O43jYG4?X+`nYlnJ?7;DFh&Z!hWWwu@pe_>a#dn;#uAx^ zB{G(Ilw0UYcu-YXm0~qXc+3HXA z9>~-+`7J{+Phw--6|3PCZ@jDyuNSs)3jrdI5qRkI6%=vv2`H*~Yt4R~?@`f!vmET; zJ_ALQzv1&T$NI)P%-EW7q3^r{?&B@5_3vpdev8`*Ri}F2Iw0R_oyp5%Vfplib^X9D z{FHZL#<&3!xz_5Jp&l~KT2h08dHGr%0)hIV!klTaqB)Jcsb|T052;fCW)E`K@Bex5;dRsWG2+)Gt`YU zDQZ|rC-mqppJk!hx{nJ^_;!k5$jjtsdUrRK; zmS}t}(fC@T@wG(bYdrBap7S|k>i>_R-;+3CX(nx8d&>9= z=y_wcz-Q6fPNIG$K;(?956#~H{vo03E;uy)l9x7nkIUr!{N)EaKcq<(fc3^T50!k~ z$EA%2>*k#p0~sq@sw%5dl^xwjW%jJ;SSln3Rvm|l7hf)eM$JuY$#6N$t~x2xFq_3t zH!c}rF0zkdrdVGv%#J$zVRrhVhFNla{I3~b99<_TN7qZKqie@IjIP4;(N!+|{y$=T zjm{(=PBQX1oi>YiV3?5PAUimJ#8~->S|L9h(PJeBop{8=ushuHLcTL=rzveQvH{k$ zKS8Xuta~_Dv3u+m{b0Qux4wcvkTz4I9^OuMW>Je*CPR4JYm*To!vtReb?2r~x5}eW zhNoa7Xv2XNIr4cXfJTw%_E?i2?=4C+f9zX+q*c&Mgp`uM{@ch8ZW`QN1PD2^Hba3) zgfMpvp!sBk@CzwKF5p>nzOjU8?2lQY~MXYWX^8F)~l0e4W(5AIjHB&HSN!oz%e}%GW{m z4XwT8>xQb&00ws9>yRg1eaaJ=9|`TXyp|6F|I3F(7z{Z2TwF%jr{=9*{I8_`Swlmd zd=ALfs^w-YNVpUeb+Yh$tO-+BqnyMZ%TO#y6`jwglVPUxU#Uc%lS1UFbC_NfKI+gc zTNtyWf(VG6iLP=Ws`4?>U53-itf(N{9FZbBxaLns3*d<;~ z5>(s6`lrEyXwR+|nM=9^761ESiSbwDup3HeqbG;Jw-2`uS+vOzuTOAtgcOsCp@_ zA9N50?hD72cjIs`8Ckv$pUIqD4Wz{4GaQS9z;Isd_(T7{WN-Bi{-tOewyDsKW~{cQ z@BZab-o@tAFf87og>d&E$UHATAHyGk+@nR{N(uC~4M5Le^&LDxTT&THV8AX7`vhA- zvherXP0S(N$^GAjVb&OJN61c$3jKr*ax_jE_t}x$MNZaxnFS#H$q{5^H3X?b09zx z(|7MeZxjaFfJfk@d^dhn5&f|6EPn%VFW(JBg~I^tfxA>QE(%;Pl>6*SEU3!?1rUeNN>4k#@()F?^9&!~NK)Ozx+&OU4 zAblq9zd-vd71AdfNMk->dY$+e!}r#s0{Gqp?`nb<+`HfMy$LjPe#hL_s%W6vnPp3){FXiicbZ2N+u{PVP)Nk~7SCqBt$Wcwpfn zj2-59u$CN)>>m)meg)#h2%v#6iU7Wj?t^4&u^ocBz$I`%0N0C?d#TwY2@}9gBJi46c!&T#ZiX!N zar%@u){?2n{Q=?sC16QQ?bi4}a2R2TDWW=utSghKj(Q$*^a5Li$rad618M=bm@JTo zd`gaxvu$y53*bo3FxY-dHkxQ+jUljoIsjWz|Kt$xoBOp?*lGQ!_fcq%$9N5Z_!%@l z9f(DQN*_REj$S|<&EyJ*T>}M(IoO&8?LB*p(B1%iVOTzguQVWjgHj3yG$G{#C~B|2#PsO~TMpk zP(^U|qylzh7~sg%sm{__Fg7V^%M!Qp>8c>ZY?a~5 zL55@Bu2j&Wwlzk_SSS#Fr<5!JHwqw>xLgo`Kz|s8(HL@2*hf@h{}mLr7t;xqII)!T z0bT)#cHkb_DY=z}Q?jaati*oW)^*9K#G+FzA_5nr848bFUf7@}}h5My+EIw+r2! z=;qKc%tq}NycEGvc=>*)o0MSaO{k}f3eeLdti-KCGf9<|-kod%dQ2zrz;WN5tUK&Z zGUefPa*A8^JoH+ha%NQ&;LdK$`|^l>)=gKEUIG)XQvhQ~=qw?HrhE)ONcDUqQ3!?s zP8Cz6W6bD8M|eJLC$Nrryz2<#0q!<+aQ8fc>_vBWBfg}Kce?Q+k6p4EcZnnhC#qXo{Qh{BNHzq< zdgmOFPxZu&I#3PmA6_*O7jh!eJrQi(VRH`m@6FL_OZ79@tsOk~itw>&bk7`Iz3-Z% z&m*iz8SXnexbHX-_Z=tWzGE5gJ36@UI1%?9C*!_j8SXnexbHX-_Z=r=lkloCR1*0R zYMaQ~j<#$3#p=%E8r-*!mca7h8oZ*8uDDMZJ{I*R^f-m>Vo&rW2GqQOP0*)9`s#yW ztx!MFv!S|6G_|ji&6()qqxm*C&54HP_qkX(SGL)SbKBvz!-bAY~p)|cEN?RTqPFN(AUM0vzQqzgKOm9=dSB*NT&S5d*_y^i$FR?6sm$9Iit% z;;ppx4M!^hA6|Q+Dl0j9E@ zzrjfd*tzKO{ThK#oM8^A^K~<$8o-I7vczzX#a}{HmOO3U^xq;f1(>p1PsK+jI`gZb+oAwQ^uQp1_la{}!cv=d0SNq40-{M6qS4SJ&{LrY zDtN)gwbR_a-AO<&HO?rLlO{!$lI|f)C)AKn#5q^OX}%DIyB$ugW?llluV8bFGG=Kd~#6r#}yR7GC4ETLtHS`F9b~4QxGUd z+hpqb%EthJA=e!PkWB}bVp2==`Lvo5P$_u87XgL|0K<5w6px2W@f090ZGM)4CRb+Y zKjb4emC=7)Stl*6_hNm30kaAW$aPe+dT~CgTq5f^NjMB}+^5l#@4ZDrt=iPhIhaDAr6NL+)ZN*9sa=bJI$3LnWO#cBvOcIW& zrAwboX6%R{OEkv#?fV`yibm zes75ApD%jyn?zP_As zzv_M3sQMn3>AeZ-gycq*ok-uGvX;!?!2^uodchvm`$A7@)XQ+!m=-RSz*|tzktv5H z!wD=2!W%c?Nx}D7a3J+6u+9~=1hrJunHz_*%Q23*$}5wN zB&A;y^-g}^34-aPt#Cx%m%B|In@-}EW^e&#m3W?Smgw&7+?>I76t`rs^deF#;yq&NsmyW$t>HQ7UvySy1#j(t z8^}qywGXo~eEoP1n#+YHrstB}y<FeUPe8J!_&R{(>Eyr+^~2aoy_WE?&nSoi-t~PGt%qs8ni$9Tk9@eZsA7 z*o4{u0lJK>@aown$%t;M-p1=BX59Cr@Y8+)2Umu?+=HP#CrJ`-F2@v?g(g-IZHq2| za&Ga)I$Aa^#1`g)5$L55YeLnQ7z+ii1&_fnEW3f#>4Lv@o``NtQr);`Eqaq^%tui{ zZsM~m4q;S zDIn%873%StZ0U8Qz#Cuz#%04%%v|WYMCluVtYlIp173ZB7&z?+EW05CIshWfF#2&3 z?&Us%uiiuWCu(Y}p~5y?TLq#h-ce`QjNOi7i-#@(DZvg|$=U_4;HqanFpI78 zMId@v`4sO6#&gZsZAkyEizPkYx>*2wSGU(mVNq|~4Np~Obq)!izx1rFz%W3074f%Z zjy#ckC#i#NnAM9x4Wx+#hN!i`a#oXj?h~7XoFnmB93py`mNeI@ip`?%vn%qmMJ3M7$jgFWwC1K8+muQ)c=w zt38E2NzeCuQPcAy3tpiS?iN2kzH!kfkb}$+23hi%r5uSA{a-#^rw9EziK(NVkyDGb zVT$7)5t1AN2Ym21_ovU49Iv7Xq#+_Hkp)YU-nc)j#oDj72O>MA%=KHP%oaE(^TG^e z8WET1b@w5%n|B|+4%){gYS{}jNCM%P2YBh>35L3HCWU7DP&maK&G?PFqxAh{pIgyI zj?hJt9wgY%gSymssQcXi%jqF`pF2bkyw6RrX~p>{pbhUd@SAKP9`?d!J0mM*;*@&8 zSKEK{>tFvG7~k=*VEl17ppjc3*LttB@chS2^6b~ir{z|JCLNC>7ZlXZ7&SwSLcD^R ze_0mmL(YVQ8QP`d3;>(M#126-JOjU*1~sJ@zW)P6G4^ zlzyXR>em*&l%RrAFC~P+BKlH7C@6U;!T*#1Foj7rJS3g{F&u#I)O*rFmmFTvSw)zy zl)H`RLsVJIHe))2`G!^dS?q(Q*zUobeRw~_syzt;LJWd-o)zu)293>@)g0_^-DGj& z47cAok%l?)DQkllYlhqC?mdvK{2Ok6T#UU^4&snb;O;+yJbVu&Reo%LP`dFb9CYJ~ z)#=>;;S^C7VQPWndCO5EbUasz<2AE%i#dplOSL-jJNrKV+VnjI^H<6K~lSt;CvGD8{_ToyXXvg7!JVsnmDd6s>cdK=)bXZ*QpZ~;%#62CP;$IU!+oWcFRfJp z%K_!oQ2`@Xe21s-=|#DYH+CoQj7d_=q{w6-K0uV??!uxJaC-1XfzvPG08XvqZMCQWtiFB~|BXROd>r|DYpEdYqCN^`e>1V|u47 z1Yv%zY-P>+9nd%%b3`0v<8(P}5oj6)uT3lEw2Ad$bA;V_f|(z|)+T1IOeGD$#p!e0 z>Cb05J?o-lZfEnYo32G9twfp^h>WsJAF#ngAe>aL5x({@ z>E4d#1>ucwfbhq}$-NtnK{&IZwJ)muJ|g>LheCD%%p~7If_(@4{<%;5(m47%j zVEA3)c)WY8VBFLUCZgb&@Ypi+xh=_>%G65vB5VqRHGK{aFmS#&xuf7nPHa?SHo(ln zo$f##XgLcGai^0EvsdN*gLPx2FVL!_UC}HnPAjN--t`4|u?Am_9y#7Z z8$*|(QbEm)GZ?IXr8tcu$Gmz58nALe1FWlM9`xmS_09MKAuUtzA|WXdDj^68s!IZDP% z2+dazB6bXfG$}1kLg+@d%>BtufzW(7fY5E?Ph*sfmdIhU)Z_a?IS9(x3EBL6YRr_~@mSgyo(Yy<+ zfjy??hg4c$u#qP3C*dW;Q*e{OJ$MZa)#BODi~2bwPrx91HH>1m;H`n({vT!6q<$H- zBB5hX2ZrOZU@yN{@Kp*2Wb@J1^l{ANZc(OeDj=F+dLks#wJa)Pj3R(PsP*n9>}+E> z@^d&Kfc4_!-fp(L!}DeeM9iC6c!&T#We6aI|Gvhfwd6U#ICYMQ{i^q8{`@U@9b&y% z7y9GIu=(bKK{WBrQguLRjCCLXImYWtoksv$*=M{qIg77S^0{t#f7HAr!MC09T!U5f ziY#WZ-;CEG{I6qNYWQfH%Yep(*iFRfzZMSAc)|KZp>e1}V}_|&eiDtHYVkTimiI%R z!Wt83JSa}?({R$p@k%wNVBsM&rtBZ~B@eA7N8w^tANZ3@sqek(Fw7f99<=}9P5(Wk@ui%Ckip17V)p_7!qv6MadDU6r{Vd$az$SW}aklrZT?*AT zYul6d`%S*;zw+J$%g_(I81nOMYVE+erUDMMu>Q8nsL@0FObj`MRYXLD)ZnH z;x)}dgsNJf%G&x3E4~~N>Zz%^*ZJ>hxBU<3uvgYz$GlfyUcuwEpOn*m%)dzpNA~z2 zXXcmE> zVd%60c<36on%u{s@`SG0?(4WzB>Y(#gq=or58L#(?R~SKT>^7l`wV~H*SWx8BYh9k zs(B3;5;O~uD>;$uJuiWUh>3F;9FvW%Tm=(t+I)z4@WuBKj>oNhN+EN3+-qbWL38IE zG>A~P-TiaFY@mz`;GaqOP7+`~ad_~x6UPJM6Ou@H#DEusQN5C|=PfIhVx#qK7kc|Z z1@uw&Tz3>aZ4Taw#?5qUNpO;mt72(V>*hZSyZbgAu)E8f55?}fU*kXsNiDA_hkOoi zcc>WFqG&#tUPhQe$+Kr$q^f7dRjJX*h zplC*DT8EBaRH=+hX%05|Bxxg)s>j{rEWKPy##nAG%V71O8o2RCN8ovn{(MX_S8GO3EGgYCCLwgxvnpDT2lqOm6&r89kB}^fy{X&Gd z#-p#A3T*gND_|TdV1%ill0m5z)b79pGSqMXX?}+$sbZcZI3>d!RjcO8Pcey}rw+1L zca`irIR2Cu{^Gb{BP0u#rA=0EMGM6W2_~z!knI1EXgPFUCmdc~4Tn`%YkUC!s4y}g zzEprQ4gh0>0oY;&r2;Je^N*p?0c|ja!pN-%Z;gKjAXXI=z?WJ9<4^%3Oa(;@O0A&w zIYK2#iT(@thW#s~R0U_jms&96P%tA*!8r^{Eja!XW}(TJGlgpTQwZn%aCLfWd)3P% zyfyxHbWYVd8@|*!8HYLj0Xg>gt9swJye?E=HKT zvNF_laW7K7gx>+CNc<{yCc}T1|3*Z}EI5!>d$2f4msausPHTK@(7r}`O^Zt5@74SG z{9)l1FomS{uSf|e5%k@%hkh+B+Xx3On{lX?4MRZ+a*gzwmgU3Wt7Wy5d%^156j%|H zrbXMRfIqUnosKe+I7YSTbk(Buf653erf-c;M?ng!)8Nx>V<6DU5UB(UB#5Bi_7JR^ z(@(~s6uxemSx#KpeEE`moYk!}f#ldwoY12+sF*I4F+2Q$$75AYP zox~zjNNWGdlyK66X?{BKpQ+k%hH6V&W+e?7Eb66BzO9PK=Al>;^;WWt(L@8gWgZGD zMQykyW7V!@`&VPN#lPXW$6+n~0@lB0d&8b5i3Ce!Ec@a+sy>9bdaYV+ykphQGH|`d zh6Bw&h}h?pa>jGWgx4VtIyDEdWw?+PY}s%3+d;Jt^^STJ+G-88=1)1o1w>(#KB+KD`l75kY1H2&&_}_M{Nh zj08ZCl;N(}hN5DLsStqMofiKrryneQY$k#Ta_gr3*uHbN?2Yx~dzl(RF>6XoF9eN2 ztU^#3BGWN6ZjNjk77PZydZB0+*6%>k_fQdloqbGtO6)ckM7M^KBmrS8Nk9fPHTq|u z+!Q)|(QbJSx{@!lkHs5f?lVr|UfgU3Hqi%IE#oDhn0e=5GpQU8KcDTL{{n24wO{k$ zv%T_Xx^3^+gLcUp>&80~?|A1Pz?K8ZyFZ?WwC;Vj|J;$V6gKc6&66D@MGZOgDiY{L zcr^5)P1yJtxR>V2_C{6%dwg4{>QZ^@bB)~(B~NcDg88ov=uAQO5t1)rx1*@a4h6c4 z@R4^8f6hZl#O}gRBpii+ykpc0#Mm^e!DG|+#Y$SN+7+lQ+OM_TeYS9)vLIO4&1YB( zB}Bc!ij9rzFKwR;`!tck2Wd+NQf=^FyjI0`S6`yp^|=>0g$K~UgSf^U-3x;!k?bOs z!N!J`WN^5%Wn(W(eQ{IE#x|Dv;(iwPPvql6*tNpWRSO=1Uw5GTK5%rUq_iqb>qWwh zpaXjf2V6kwPRRyqX&!E3O!h{+iJk?tt_dAy6mO3rp~qPOwyH<791wa8J6j<1Sije! z?k2pt1x`eT+2eqVJ_)^Lix0DOJ7^AFD4qAJvq0&u_dLAi)t(KoQ3l&?#dwyiAp5*4 zHKpS{TSe*HfD16A4b?*FS`*7!@>@;tCn5tj$axingg!W#Pw4&$joZTLwulM{=zd$i z3MkSwMYn-H;X!NM@@w?Z7rGC6&Hcremq7P;-Q?MWc%xV;g!!LDGH8PvE@IFn% z!SH}FIt~xJa6d-ZzU1)8V-5^~e|&fVt9=fSX7X>Uh-VlcN1b}8;jyP!h6fA4@MzO= zppW6P{yiEVqrUb|!$Y1=wU%6r3W?zX$nZW4j{zt?)a&%&A1cc89yKaNY^=2lAF%u3y|bz|jEd-{BEoF*Y#9{}(nrn>j|z^H zJdTry(}kbB(5T=r$vaMs2pWrop~$eIqt%rj-T{MFV2`Gl?TjL{85O@oAO!DCa(ST_-G7xQMh*ZuMXRz^xX_!?FnbTj9m$a@AwC=nU4N@>FaATb8oABItsZl{^)zw;`ESgDwMz ze(^&A(NEz3M1>iYIy8tdsAx|x66YcgSk8W`owSh`kDz?IIcyR%YQ(AMm#Wo`4`oma zo~?L2RYZf8F;hrte;LB{`^^7>(OmMCe{3}OlYEg6bTrS{{BB3{NanzZeGf*ntW2P+ z3W;Q}+yQ?omirvdOsYw;DOm*c+>_z;=}YMSw+gB5fdf*FW1)5rSbyq02YE3Yq?+Fv zzYB$_5xojNJ)#+i5zP>3z~PPP&*vTPh+cK*5xq((4Tf@fJ83mrc6cM2Nj3N~fa$Nd z2$b6%g^VR)wn?1C@pc}pJ)*tv5kcrQp#B~$c&aPivt z5lqcZ|Nd1|^CdG=*_K|rzT?#VY{~aQPR&M~8?eN4??KNN+(i*QZ0v?l0_t%SgMgv>67wNbt0dN;6Oh8X+`?3d@w1mLO~#8 zOv>lLhY`w2IRhcW86uS&o(LDi>X^Pxj5ZlbdiC2O^b0HW~%6ZrFRw8vE-bev68ZL z8cL~DrKrNZ425;271rnUl1Zgxbbz|QxD3Oq0j=@BAp)Q9b-<_Ssi{;cRxl1^#R${> zT?|SAQJ+;Zsj2cNsq*Hh&?9XoD3(}MiYHm1TR5@Q88dNouvBc%2GHJFC89Y=l12}r z^Elf54vyZNb(^;XOROK;TuP?l(430jwLd_&1#1)0tk(En(Ow0KcK9?T@)aZ)2S_kN zm)hbaE-9rsZ_@#*W-%07!Gy}*aX7Ul4-u`J(WognXZ1_*1=P=!7Oe|f)ZDv8^^Aj^ zNk;VDqRoKiVYR3|*`j&p1+D441WShAH8(OuR~cW;R-}-FRof0A+Q|{)Gi?$p?dC}Z zc?RK}^fTl(DKdP9Tzz43gfLbr_rIG`Y}-2(yDhEQs-V)d(D&G|JY5 zTQ#Bp{ti+d{Q0(fJ`9g0>RBlLFqIe`0i9OS1gqq(4qnL-r#>Q%*TuU%%J8UeQ4BYE&kXq&!*AfVjQ+mh#Yj_db10K&b@Y{qk&-FucG)+q z%fWu%#bwjWW|Uo0cIk|@Nxm%R2P7d(!9Z2T&x65eDk4Mo*h(yV1nmlT6Qc>ym>X^E zN(3U}7i5`%hya7jE^m@W0G{rOx(gQ@(O}g~KuRMX{E3on9EN39N;CZHwz1j_5f6nT z3Xn~K1&_R~dNP?KCF1Uqf8nawv+rA$o|6*CNl>SEVa8mh=4xZV#&al z%^dgAe1j|8X29ENTwLw1)QBkXf4?QAGozEWwGtF##BkoYnLp#aE;nZmO@kU+oyqYt z3zkUmW{%^Q_jE@~_E_E-;G<=UVfV#%EQ00F){>_e?&w?{q=#LaUF5eT;~j94rfJkp z54OKI)ygz-1DtYqFJ_X%zpIs+F&P0j9R`^`N|X?s0gY0I*R(BA)P|iX>Zp5-$sl({ zDR?v1brO?k>PCWSAqgJ&C|% zBB>a@+i|E&jFe0u;w;VwNsnfazf`0H3T z?x2_;ZPt<2Lm2}*&v2rJFZLqbRg6p_+_y6mE)#<8R>LubJ8T3AcPQi(2{%GvrYue? z!p%1VEFfGwN+kt=a66~+n&f}8pSdqzk-{5N?r){>ha(|~$`aF?FlZLtrx?T&oqsg< z8MX0Bz@v>F3vSr5^#c3goWJSd1(Hsm zV}X&Tfcc?Jiw~8FkvfyH%IuW1#=PtC0ui6;^9Qb@aCwYZ+W07$@^)URT|C{wC^VBS zN#P~17o~XkKRAr7+BJgI_~8v@pKHuM8%M(E-M9}7u9=qwFlL2qjD>?aZA!m$xfl#u z8XUfJ$v|^65#wt))b_+iT4Z}GmebL*Np;^+LLkshHv&!2l>3%JFHP0G?^_nm1_ubH>`><7 zFdrh03B|6@9<)7^N#qD3z3T=K28vgN#s?W$F;_r z;YbOv0VOlLWR2jq3{pM81tt^#rS8kYG4K5ZvPk%b_`^s-lgM;atR2HNa$pj9Ga_jc znQls=UMOnX#i_CavXrk(B1@=7QQsz!&qCqk9=JJ&QY5>WL@qxX)2-9-gP2OhWW;U< zEJmZ^U35~g%N!}#ZATIXlh*h)L=t+~g@Z30yG*OGE9C^(Rn;}IIw>pF;I*`(HD0Pq z2b%bDo1m#RUX=6}Xm4xWhA)iWcEAGJI^ak)Tq9!$Kx1lzpFyf8FzkqMVE0aJ(B6wX zrUtvOA_=ieHwAHF?7oIbVwY}8qTbkDEtLq6rCx`FNSc2#vvtWL^G z#jdmhxIwJo24s}@r6Rc1sbUV1gloiU_^dcqM%NOXbW=tFbHP1lU#8 zHL*G=D;2xa3K+mgtl$P#@sr+$q<6XYw#HY(7shT8ngZ;W!jTfNRmc!8StI-mQau4v zLjf4O-?$CfEkG6t-w^)-k`TLeQxF%%?sW$q3sYHM*KWeJwe;y)6dxyj8Px&r>mO_mxFg6jqQ|4cdVE^}E1-|z)=F)He zt>kV=brXJ88aClaeyS^#n*HN{u0Q>`%zh<*hJt?vlh0|GeER47ITSM6Oh+*_mDrQR zv7?#(BjFG`lwM-rzL%w~_j#)-Xe*z9@;BZWYCWHw@c$$sdLq1xW&cHT>yY^jxg#9X z#gHF`Lpm7ZA_S|k&1zR*s5rS>u_(jxXEPiejL`100?NQ&Ajf1W!@Qozwv0quP)0(P z@mFlRU}1N&DkGuFp!HQ%#-d*%$B`&QeLiw~2!icw(VlxkA+)FIKQAHcL-Wr`q50?M z{xj#Dokx+_^{7y=cn-r7f#|2PZNh#U+a{);|6%q_())?w@gAKktWf(7P08a04Np{2 zgsFgl75>VQe-8X+Z9AX-zIMGCsS5~>7RH2*7C!ZV=LxR&&z>ikWvFIbD>>ZXY78-e zc~#n8?T_s<3di==68G;6 z$2OZ|PmG3k`2FvOV|y#J`125}0P^z<#`kCV0;rU-b+I7T@HUg`^Y8_!q^3^=sh;0t zQtgG$FAHQs=R+o<2R?sd5V7nr6Y<~h1?ASU2b=$B;wEi3zKh}WKY{E@eB!R5e>1@B zR|T;4d7P^X^1sGnA}+tzcTS|_eOPf|{{oS~>;0#-dl~lOndmzHT!J4=u7YK6=V=TG zIFEV9h>LdYd8RMeaS|XabIjF{L}3($paOr&eg#W0Nm!J^%02s3qr>e97HWO8hs#W~ zCw+;D_Q+Zi=LneKn97oCz?AkR7q)7htlCqUp*>w#=t*oJ?cqC5Xiq+x1+Jj9GiIWUwlPRmoYEeaV%o!^ zRC}()TpJU7^>HVl?B9gLOU&VZw^Sx?7n~p7l{famlKb%oabEYLupPhF zoY&oJhTb0Cnt$qfV5|0#-wQsP0YM|G)7}+kr0UD@Vx{7;q!;7w)=e9g=H6%O)WeB zJiF#)oQghJ#wEmCcI%`ZS#`AzqQmQ**W2#G=BV3&W65z={6U2FzL8EQ!5ir@z5@9h zB(M_|$Wah=XXfz5EGVQO=OiY=7{ifv;tM%;;U>Ff-vC_jop+|~RrYh-3lKH7rQAIz zUB#*CQ+!u0TJqf7^_@5xzZ|L~3!7P}U9)az_<-I!?YnX^x==m+h*coZlyLgDP6sES zj>n;}l#m#$uos@6c0S8kPnXj9cyIU=#N736Y+afASKK0V+#W|m$uUquzp1CotNsF| zZ33mSufV~U>q4bzNX3(yg{!j&DCjBQg}9h|dd$6wr~j*QdK8=o+lgcB#Dom+DkZ#Z z_dE@+7ZOv~NpH?^2Oe~KT4N=z&0X7>V~Rw7R|8@NsSvxgh7d|ZY=S2c`<@Q&4KXND z9tOn3U{-J*)Ej=V9<(3Y64|vso}6XXWI^;mqp_k*?;OMu*OX%KAs^O*pi?(#v{l1r z4WJ(}AxAnFgK2z^Gf@9!+pR7DSe`01|bJ(k+0rOKB)K z2DPh8a5XNQML6yePU2DkmO62!0m~2py?_>Kn9}s-NVGS_-bh&UEM#wFh*na7%0Z|$ zWTwX0ynJ0H4D;D8E-I(evQ~k}N7d3$kc+ca+@T~xRD*#`?090rJFb!cj4ZwB}AbdI@oMOkR-5e7n#>437_{h8?MLA_W z?zkNn>M*Y5OKEsmIqL3D#M)x+O z(sK0_cgAYFq|K_SgCYzky9>>41#zm;uJ#2b)(%)JZ*|CQ$C7z=v% zRnTIE>fx9&(BeTVdx|=@rurvi?pGL+SAkJpp-1_Z?NN7cQbCG!Lcl1aw+*QcaNI{# zuiTg3sTl=EM+<-rngJTje(u)E;LQgzx5N;mRr4Lx49rMN2#V#YEeUBd8CK_3Cr3mD zSXOVwQ=pqs!J&{n9nFZkCuJB8#`^CH)~GL>`oB=k2_YjqBo&HcY{6k)&WR z1KcvSm@P%COQm%``@!U_t1mLGRm@Dcw)*1hE=q6Z3s{btR(=DS!>!c9=NL2GI*->y zg>PCbv0GmF1}q#|wbZr-4~5uyAbqTjMqR3DxCD*oz%caCV>xmkkYUKF=!6XsXhQ_r z?(ud_X$C>mEaU|c#F|Owy#x{7GA7*KNP{b9rv$NcGP_q z%MJfrEXz$kMu%7}o5fv()aYPp!st)$PmK<7CKg_o79Eg2qxbZR&H$F%q0VLMA1bYX zNVnc+302&k)xB2HfyiR?enfLZ-N$_ThL>rb6>rXA4PA!`i@xStQ3qpO6^ot3PwEH| zZvqxpH`42P_b(R^HLc|I#yjl`6!`ci}z< zyfFJ5-=)0s;cXD_jU7^?9I-pzjcw{{HR7mBU9)R3Qc}4B`5|TF+`@qu3xW7H<%NE9 zyiL3}wyVsm)Ymrk#mB0R{*Ak07{1~(`7@;M6Iesko2PMi={;+jTyq~k=<`QRD+!@-FD40+QQfGkmnq4 zEZ9s>Ke20s*FyK$JrBFPx4hJ|1_q+;WvNxCBfkH=;7?iBk@ zVtG5}c57hUXw!nb?2_%4N28tRc*ml1PdJ5Jotk|x-Sr|`7jw5bHP0L%47yJuUYMI3LzQ!vVM@R~f>Oxe~Q?e~&hvfH|mOJB#E3!5yolhj`|rGO5L*m0UKffPFW8#Pi?&7dRp_l%m(ZeA;ch66PPDxRT{KhlCOSZS>aeyl zu^m5?J3<9aLP*{eghVEG;pgaZ6aw-rT)`_18!6gk)$+Dnv>)c+1-V1fKlkavhi&gX zSY_G7=QgT7%K&AMDrLM1_d_QHn#T;3x3g)I%C6ZrVDA6N-uu8;Rh{|X1cJsI+~;W8 z#@1?_vAs$EIHA>+jJ73^z&^MSphV5FfV5R=JJ#~jL~R9%2GldhoNAiAu&)WO^34auA-}~P89X{mjwbx#I z?X}l_)>_Ycp5OC4U&DzEE}Wi_Z4lR*0IY!o`82;$SdUyR#@(^iH z%a;C-$rY*f+C<0eqKm%K-fdrSH_WQyuCLT`*JY%dp^4O0oHcj-s*FeVe~41R1{9=` zQ#co!zUVI{HGRReX$4z8j}mlYd;h;Wwvx3z#k(9Fz39*Dvy;apvX>mj31X@~``s~o z+VSnkuMj9wQE(8ZJQWdnm6kjWRRN1PxA)Oh!c_;O}fL;!#e1p z1A6FJx7lD}GGi;+a%p}&p(88y(0>)X>A%gK&EBK0F?%<^&09DR_Rz(tV0YNj)eU>p z?+tPT*4)JyDGTb>EqaiXo}jK{No@Wkue!90-&83?+ssI9sNvO1 zvKO4vkls==n9P2CI8pOEIvR&~oI3}T(R|Nam2c#=%6UKDYncD-t*_z4k^m2f7JfBI zzu;>iHf^BGf{m3cC~t1?Ej65T~<5qhryG5$ zc}57%kyIy+q%>a{eTL4p_O>(?&7Zt=g~oTqMqbwFbA$SA_C|gkeQuyXQo+WsSE?K2 ziYwKy(K?6cK%X6sK9hBih4k5J^w~uX#q^o1d*0C}Za1OD21O6KWH_i<4{;I@KpBoY z^ZmDb5(N4hzp3&8bzWllF;OV<`+ny4WX%9B$ObBLWBFQcet+NnRY;#A&SuRvYxqk1 z8~iep_e^CF4$Wqv2gId;aM5Iky{!u4;a_-2-0rKSu|s^Bu~m0CJM#r(@=3>4a?ZvQ zp_MHM+^j3UH?_m9DgibZsyhQSaQjjo&f!iSGGAiy(-Zu31LmLvNDb3fq{SF2pI!DM z%t77ctPJ^d78_{B3YiDQGGaI?b`h%!P1`hE93!qnt;yi}3AQq+{$UygN9Zm83HYgp z#3`ZwU8UQy7hdxHkiSi)U+-^63ukxse>lR~EPZgs;}4d!-NM|H4OHNtW=Z-lXd2klyXexplL5wuh~wS9h}sV z{;k#8*1^KkeW&sC2P+S^kkRb8$I>; zCrD2x(mr;iKOM!S!STL9&D`04Sk1?8dqjJ9wutf-A(LD`d-)0ru@L#qW*%;4KAz`m z|M(h{SZ9Lm<>vjG$Dqg2i@vklJH3b9^C{XryE)&RvE3ggn$8RU<~PQ(O8s(Y$wC}$ zR`WL(#-S$us4Wc`_7vL7i+=E|WhIoTZraa;WT&JUwxxdEvx~MedspxZ9k|Y!c_)I?DXv9_FKr2~fDEX`qKwt?3jg8~8-jf8*Cj zofnp7S!Uf-K|fuB24)qi<<*p4MQ^u9wo%%i&b>~*S1jP=VX|k#Xf=&%tS}*e?DiqP zSN+2n!!y#(@9^&UGSZek-V)nO&i5{D*RB5$<2%+re6}mp=iMQZj0)+S=L!v4O)Sx> zi9)}(Rm;Ru^$%B*ow(?Bt^H_I}_pHKHC7ju)_-%wpb``TUjVc!x+ zIsb~*OGqbmy1b}*cM0qO{0WO^*2_0pFSpCil+R8vTQ8?UEcpdWuhvrkRiv7qCh;}Snje4EEt%_Erc&T62r_ln0rGJTR(*{qGj)v| zH#hI#ylFqTrkW0f6;ucNRbOzx>Va}uFuRTO-OTQE2|^CHV3uoN#(=1XtzNfYGu#Fr z^VY1~xFDcPmb8n}ZTGXc!1;Ew9-V9FZq0-QE8e1~D|Xv`!|QB2#&BT0+@~(8*~7+Q zw>D#MRZ`f3!KJh}xNH}9Xr;YMdjq~$Od=}daUU!jgzL`{PJ?yB`laj+Rm(FbC0X&OaI`l zgucd&j+;uVN0fSdB@LqqW1qiex(No)@2G$H9NOC8P3dEmT`EFncrIRHi3T7wx2}~a zw-BEpl*-7G5dv>uM~GLFzIhf>#)HG1Z3k*@n&)T7ew%vyua~dDdC2e%zk71bp4B~B zl!aV`vB@EO;oCSY_~oUf`#-50j#=*9?@;bcl^cEBa>J^xQspH1J9d31tK4Ljv%vMo zd~VkbGe-@aee8PnaQ&AvsAu5Y$1ZfX8vl6}@{e7pR)ydtMh*Pwu?zjR3K3#Mvw-`0 zhTACn%ABshVVYaZ-|O$*;^@t!NNP%xsfvBCv)`TXC9iT@9E5l z+pbgk7%1_KE`}8QkY8}q%;Vjpi_uNh1vk|e+;k}C>gJHSy2L{l&N|d3*;v4mI|ETEwg?F1ZGnwuNBC9n#+g7DE0mbQ_JWmBV zHiyTV;n5F|6T{<#@K_rjtHWbec+@~R${=WKS3dvz?zS~9rKDa}|46QKDJ56tllO#4 zR>fbIBVCWT^^n8a!|rSgXWX%iL+n4;g`c?#gRa;E?o10PH~qq$#q6zrW-p(8$i7i} zld3=f`_M#P>~6c6gZ`0RkWY#r!rXcJWOF__GoKW}SXss9+-ud_H*t=25YiMlt}MOqz_8CSku^^%={S;IdpUT@X#`T z8zRs|$03vtfk96~T&B1g*Ujm!WZfHzK7$PZugLY&bJ_#o0dRvoiOk7~%#1R>h6p87 zb**Fn7=%_O^=A7PcvClz-|MtHXL5D?-ekI0T&}n511d~GXCp^BR4%V2HUsM4Tf_qcOeyE19E8D!xsFzd@K~%zAHU7MPJc7YMU?&;X$^t!&d6?m z{)!@cmi!`xNZTUoE^V@l~r5NEE*@n-cLmF~=%Y-*$FsHX1 zKfJf|zU8rkOKHzgD2l{EcZdPd9C5B71R# zk8`Knx6(U_>~~RTw)P^!A70luzTNbL)6job#3&q#WoI2~sCmkUfeUX!8D4godVds> z=~zSepbq8T{KgyB=_FphF45Kw-FLP=4|2G-eBpe;MZur5C%q08;_n=}&xh8b^B8m< zhwkIheGEE}LFaMkJ`UZ-pz|1X9*6GZ(u$gfF@}C3E@f!^v?7{covhpFE&B-#L-$#% z^E|obPo2(_&-y~H{pi;p_tO_gdd@+ljVCXh@ARCHPmrE-Lecm4Gt+wfw9lS)S}#Ws zNYl1(+`_SsBh2!&T^x6DWSrsKE;DV2S)R8XX!pV_JMjKUDV5cqSS)DEl>RShu~gY=}pUA9i&Bs;@+mQB$59Lj8=tlNMg3 zd$yJ8o*aHeyTE*T&Vqxn@b+Mc6zA+Gt-4@{6z8?M^IEs7d~(r)LER27`*X$wP=HgC z0C6HH!0WtcZmHPLiB$6;1YlZr(M|^en3iqn!@1#e1_6+xtwi?wjF|(109df1SHoCd z2qR*FbUoD{JY6qx91y@a0~5^v0+`PHKUm9Hld7_M?A9^5F&bY?_Pr9y^trdXl9Tu} z{ai*)E@+WDz+D>T5;6eMnSvH|TX>dEZ<$;p1tnN2yi&7?0eD^x3Gg|~3ZVcz{wh5_ z*Z=HJ%Xul)e@1yUN(k_U9QV3J4QSw|jclGl1E}Ta=+@%z&Hd95b=&F6Pi_oCLrw=lmWT+dRVl z{lZ`#0On|k3+-@N%^^XvSY!#AGpr<1TUuet{TZ62uoF7c%+Itj$pa;`2S+r*jXGycA35a>W}#D{OK z9bn=}t{Et`0?ZG0ry%2y8%ks<&Lfy&!~@OPJRZjfLb!aKGUHKxgglTT43@7q@dL1( zw}>7$IE3_}?m4kQ7JX>YyIs7uY704_86gL>$rgt3!?rGbN&JgR{=FGnkp>c%Xt=9w zCu4rwcs6VhZmg7V8neL}Cw3P+&;fWLJnahpA9l%;Uk)`XGMjP5!zDTUj6AiMm_RJ-GGD z&s@O#e8B-YG%c@#iQz^(L0?{$$R;NyGK)cKHC6@bSL~ZXonwPhkT`htlQ7>{oy@dO z#6-at-n!;@7P|7_7(a9Q8o%zUvX)sOR9E?#KaWt|LU2J9hTRG>-(KY{{|3^%h#-=6 z`@+fE!r7{l^ymQ(9J%P8Vz22QKYbOlK&%fkNgr0Yyfz6ncrgTQXH@JCxxx(~VOMh}7tU}0 z{+Zk`_8O{e)KktM+oAhz+rxcyP*uIdf=LV0M;0UVOLLGsRFk$&BjXBXNScH&+T}@9 zL`N;y1&s$;*=R)@6SL;XpO(p%;8zmDa_{iw`a8Q(MYa#jb5CZ?Gl9Ujct~b854kw^ z)DcergMT7VaEi-%?^pYB6Gu3KGzcQNc0zv2>0-)gJAex>A;Y4Tm+@bv&;30=Q>KPr zikZW@=pt3J+@mTuvM=(+P2oJ1Gj^h$5k0XkSD1EET`>=Db=TW~@Ar|V*tupmb>GP@ z;odT87I_2Z?m~~1wx0pG8u!syl8`xR{(~}*e8$GMe?t<)R0rv^cQ>Gb|AjJ0oJ>xQ z*w!w5dv4+UEu_s1n3O<97ydWp)qAJ6lex|ntY+-2+g38a z!K?1!UFRUj@9Zk!nOmr}iCQo3p6^{jjpx64<3viG|8FEt6!`i9ol+mG28P4t}rk$9;gaku$3CamTa<^T}6N2s zhqb9uR_ZPZfP(aMSW}{(c4xX*$Jm}?DYW+^|IlE0u0Xpn0fDPcs%J=b`Dj%dohkB1%dm)mi zq^syP3|YCBY>STDkba>-4A?A`6^6w0mi>+vx@^aU5lb`AZ!l;|pX9@q@^zbuln0({ zUF&Q8UEIT^4|9cn5`OB#Jfc23%Rqp(xQag?AEBtg-iGU)%)(*~+snAKVGF-hnw^Eh z;Tb6$h(BuIP-u%p%{CajEmDnaugvkI+??0f3-H<8Nlgmknnx5&l#WERLR`(WM;O+# zBg9V)+`uaie3KvJBj+UuO(+(UCp}qd%YV`PzwhU<)%c-Qdnh0;U#eL^xGtJaxHx7; z9dFi=3w$vJ->q353ojV7hzlSU;|`{jF`P?~sb!6<|g z+>ufwItI{HZWI2|=_;8rQ&5|9l~N=bUo^yAunS$~mPEQE1ZRi3O87?Rf-6+8V~Dw+ zbh!iDg61_4w!pSh$C$HNOjo*u2qHmHpbi@!5oS`J~g&JwdIepELAqZT6Ni z0M<>!!FmVpPU!|y&^4HXZkL~(!g%R+3c7)@w#L#vroJ|{uTZ0Cc*8vXPSSW00B2g! zc$pN97i$zncDeme2YVpH8!9f8DP)t-%8__OX=4!L+XQ zMUmE(`K+7yjQz1qU3Htn`E0$-XXsm-JGg_zHHTC}?`jcOHXlruY?GdKi*I_@?ZN@s zxzoEA&KIRpz?Mn@yG#6~@UT+AE^IF9syx5?zWWP6foPTQ#^Pne)s54XjdwS0n<16+ zk=7Wd&AUUU|I7DE>3sfu8q8kXj~z9!1UHTS#qW%-&T3YmL=Qj-udS4i!pUcLD;$wk!FjQ`JqN}f_M@vp70H<+COu*E!jku5OkW$5!TL45{%`a zhLe`HD4Kx!8xGM3p7(;k=Hc{~|NK9n`kRZn^Ey?Kbq9eMgY@<1Rgs|y%+QOZHOna- z^RtahLj+@ErGqa%Qq9GpaSji_+#L%ij#yURLgQ^FwTS_1B+)|H#TeC&-`1a1Mq#_= z>6uwWuIq_^fOawMsA)9iasK{|Cf+-fhj6rhBG39QY@$zm2CjyaDHE(3Jj%bQvA4CB zt=O$=#Sj&6^O}$gZwcpNyWf5WoA&W#t7L}ez4giY`^ieR8YLN-j?M#t2kp?BK z7hv9Z7J)tvGLhP6Vj>0fVH2s0VE}ztoOw`^A?V|nGwGT#wHT{-e+AuL!6cEYU~X~q zPY0hSHM^5v2a)Wk;=G}gU$JG?K}Rj;K_|cBr`kb%Y;p4ss1AqvVA@J4NSw_+y#<`q zIxj2roxge5FBxt~cPWDQLt!C5hL$lH9_A}0GK(~GUip+^h^y~Y>muWYa%5-`>Qj1=cK{N1 z@Fk=~emzpX733$>=74kd}+@_#c*MFbn|84x@EWD(Wi zb^|`NPY>7KGugGM2U&czS{5w6R@#30RkKT-n@f$?(`L7?(O3DR&$P&B8c`=_T7-w8hn8zJ2_$GvR&PWfN7^hGh=`88vI~`*95jWRdr=xqhFvKeAr++x4w@;gm2yKe?rdhqSdc2CG z|8={;|7OoO;5U3JrN9+;>_4|;bGAHD9=+2BE|C3{mB?Vv)+RzE=+$wf1jYJQl@z18fcX0K(V9X|=qx&8ZJBddq1 z#?7}X&mZ@zS<^>-H&E-U^22T^ZaR=~BmypDg0f zC>QPknyp`H+}P_}RdMvHvf@e4vHdSS->4-kzX3L;J*41ACeR@GW9ig0Ml5zghy+>M z<{vXBe2fzctdLXz;elhHT~DOOzIvIxOPmX8H1EGF30vAYfr2qdPu}^Py*s{wkSlDX z@wkl6dDbs+CO@7Uz!^C_iGd1iLBtb(}tJGf4m`H8A1gO-7P zOAc}TL*DUdh~on0^Y5X@ceRT*7Ven4_?I-A-f%D+GxLZ~ep(hGB2 z`8bVnFBguNqG#laHNb^D0B$X1XA~?YsEZYOG=iA(l%4$Y_-4 z5y>SI_1VKVn{w?wH>J()(?q^jlla*FmvV!zIzO3fB6gEd{DOGqmy;Yb^!B|; z%T@bAy~e$x7>P9FUN?is?scArRm#0w`B7iayZuIU zQZkNa@$6Ili;}&qr?Vhyxg5D57tN#Oixe&(bgb7NJIsrEDY%g9s)nR#WvR?39* zI(gtSKrS{PiPM>2KJNgJoA-*pKz(;?$V!r{i8S%MTYH7|I$13>&`Mb$Xk|lU^8qOr zFtCPIe33FHib0Rlj-x;YLumdJ%vnh%KJ}Je%t-2VjxUW66tOpLd7hEt7@a^z7_d z?Iqc!57yGYGisy#Fm*QV>s8JB`l!{_OvSsEcl~bi!g^sUuG!Pe)8g0fA(y)b`8{i2 z(M`(wv^)p6w%9#`y64k-)V+ziw_5K`in(g1MIgwIM9UCG3;>N&)P(*H%-&yS6wSdC zbWl78li6wNjhiEw3^rCzuw55creHo3K8E?Khq+3Q6XGFACdxuk9G7+_W|rwz3TbiN z!DYfir;!mtW@Mrj!e;I(hQ@T+C_ECM$@ulznArF|Gst|kVC+sS9J{qSKdNUOciftp zRQlxOjM-wKnVhG*Gtg|(ae!t;^AjJly5a3n^S#-nz{Uztny=Vcopr=@ml5NJ1|iG9 zS~?dqZ&z6szhqUpQni-FFIkL7Su8!d=%+Rw-(;jYY*~INo^M03Gtu@UfXs7kDDKcu zEVH3FBRhK>w=e>k1W%prux7^}ih{)2Q2aHCqYT6GG_%MBO~Ig?-AUsaqVZAs$fTUf2w6Rw7K8&O( z471r%#l+2F%@ju0>`5AD=CNi9!)vxQGI6Of#konNQIJ5Fv11*D57G~H;3-&U`!i?Oy_W-`~a?YvrGD3cDP1LOS?!JZY zvA01D#}c@O_mkbf!T%+K0%XUk)$#&s-R_$}KsRj}N@OqCgwor)U78=as(p`DO+E-l zkADha0f^3zYdBSG((mj|YIC^y#49v}X7|J#2mzGs9K&)x>z8Z*$JUEKr>19kgV3MT zWxb4os~9o4`>!A;t_?A6Ncj0k;UzN6)^;KU$DhM*V)I~rLrXe}G0kIIKH)IU;O|~= z`ym=z4qiqJN`58kx6yH>gEemo7olkX6sU7YDut^1^Q~g@EsbCDyo@ zmMPtZI0jlyf_}p*bXK(8*p7fng9>b3klt-;8?HbGi|1lR2%~EFXu7#lAs?GB&)FA4OiFzY?j(uG@e?d;J zV&%k@ld~qz7ak<{Q-x*8h<^%IH{>2dmVcbAL(+24Teg-40lBN$lE~hOqUQy6^>ASO zYPLI{a<(5Y7nTZgk5vc`wi&vwcn&R(Y;JZKz~Hte_F8+nAB5>v$ba^806>?LOZUZQ zuoT$+vq;$eO2lTcB)DuX5UO?-iP#KQ1(&Ub!m_nacwz1tVdfbOUDk^({&3Os4! z^g>3MS)`zu#4csFX(Zj;&FOjarWCtg3d)dNF;}t7IGLeXX1L|%aQ@a3aL|?jv4=S- zJ`e6PcD=H4G_S0nO_s-9)<=oD{n~%vy-!w4LCGcz zt!oCc#1UG5AGBX<899+mgVAsKTOsYq$lcMu0eJyhK>xCI7yaY1%#7Sk)tUePkgmL7 z8AZ$F-R@Vyd5q~HAy-*0Tl6pISgv$L|1ya;b9fa-9cpFSdUrtka+$Rj`q!L0xBlum zT}AQ(@bkDX+KX9Wh%tS)<(fD76LT$mAk#t%L#T?&57;0P{f zRYfXmW=|EJb_fG@3xpw<2Vo%g5YQnV>s6B!UnX>219jr7t6DaBC+!jdICJ?@D^T$67cK5>#hK&U>k8H=D{~C}hV@?v zGf+p-WvMDV1Vf)eRK)Eaj7VjXc6CJgRPzc7ZlX>x1O4;!{i}Vri~v< zV%9!F4@ey6UEW=?7jPq7UP! zxu6dPvZ+3j=^9`x0!=`W8e?N8)ViXS!5J;J`!PcQEAGgINhtj|~bnThmw zu*5qmQsb|gxkw1_T!rL=HQl9^Lm!B>D^2tUD^)Rh#`LYO7HHEv$&JFCSZo;9iYp# z`Spkk`Tk9*f9LcjOLpe^cc!nt-Tmd^Hs$yAJa-- z!Oe}muv+Cp@C($~Q*UB^_C)wuUqr#62BV;MX0i@{3=>)U37f*;R)5x#X$Pel}Tc_m+VwyJuC0Go(j(f(v zFZ3EOhh>I~>?(^oZ24a6J!o$Xb3nQmeFH*}UfdrY_G>V=+w6POH;XC&qcSgWp>Y+y z@f+{-mcI_JxM1-umY2GCQ&>n`K~G9T!~X^J&UMV8*zh7fK0R6Yomgu*uk}Wd9_ar| zdO%jV%AyoGPtHqF@&><7b*jlun-X+M+LT;?H?QMa z{(hOuk?v%qxIGxU{ElHOp4 zafGq26Ae9XJpSWq?nu#4&e!+XMws~`hx*++?5E?B7{w(qI%4-6m%u3g5hoievhO_+ z`H;+pVAhWzA9|b(vKjPhK4Cn*Z}|`mZDHs$quFS_Eau1BUiS?%JM2H?CcEJuI4-Om zF07Z&0XOO3)iF2n;H%QRf>Q=tzNKOIAq}&*2Fs5V``q}Nksn_gN#k=^t8>^+dUu?q z@pM#Y5Ep)4M>nq#0(nLCV8$u{2N<{EBOm#VL9K6luq8umN!P}M0 z2&F+uZvvmty@Zz2$`FkC_9|xi)hrQ>YZ7(c-tx~uV65cr(Qd*onDs5M|1gm-Tyemt5eN zJSo9_+wd7bsP;3b`FQEpUc%T+tyws3(Jn2w$u&$j3>L0DR?&@HlSGav+~~f6b)DPj zejG7lZljAuXz@ljvXo8KyAihbq%WoJ(Br{(?WUcKJ zb0+hq!)RfOr5z*NYe?@BX01l%cGqfllbBg)qf}~xpDAVE_ExZqm3NnUynu~V0@2d zM#0XsV0#`mp0}kp5nMJd6?M>qjGUsKIo~2dA+gE`B-qBK@6%4!^lj;T^$jIpGMp|U zT4F7?7(t0jiZ%N-F=A&IOB|Ny!*SjOElOx ze*O6MWGl^Xj6K5Qd)Ph4M32Th4l+NnS!F850YK|gNLN)u&807h1!p*F!z$ZQR=PWb z%s0wbm9+k;pLxUy11>&n`-gq7ZM@C=7sZdE7D)N3wB;s`h~mWqNJ4=s~$`8d;U8}ev_-T=MQI>o5*Qt4lAdiv%BHE4FBLA<@{!tcZ(1`uZlAs#&pQ#*=v( zQd@jnOKQ8ia3w)%8z5QCtt7aYrY((8cP(BW_FEWA*h#ld7vL6wk=MhK5b~2ze?;+~ z(HA`9P=_>hrI1UsoX^8-emR`#Jlb;Y8b8A(03)N!rCfz&a$-T2#BYum3^#?0!qGP8 z7-9S!{W@|$TwFLHs&hPptW=IVD86;{LBUQOs7Lx*7Jccnott?5Bk9ZaXDB}n`;Bfi`6;`C9c?=hph^~s z0QJ9@h5}TWEd;3RodDJGa}-(w=qAzj5(?XESId2niA|CFfCpe58Zkfn8ILuGxhW^x z+Y@AJ{LIWUJf)RUKeD~`-m(jA1!JAT`OyaGQvA#)$tKGOO&YYBanD+G8pQ(c&DP^y z`Fjd}bd_z!*ia<1*OZi@L;P$adsch2!O4CvwC&D~Hv`Yc&QPTlc-N5ofo8^c2OByyC& zAUkO^X)HE-nN=}Ze{rne(KiO$D^9Vzh*i|GJW1tj5opRk%h@F+TGLwQE;6FHsHJT@ zS5LKeqFWA1a1=$vq+jO0ujFCD^P>{O>p&iO%d;$BZbYEVS>8T9`{}BBi_=CJIq&X+ zyv7mV2Z12#h2&b^{jJCjS&b+7nN+R&HgFdLj0c(eSdd9n5`eQ>(+2ZMqDm$9c9qmi zq&=$T%=r=})AG|T?u8S)I=4>*xNP}GP_r#4*#f+PkT;+qv5z~rlIsdVlTQkR^3RjPE1w@ti@RVnH^iTk>cubONXBt^gO}FbTv<~(j5R$WnclG3rcny!9JKMveD{vD4e@o52G z&!nmUj>lt9{_l7^+b{k*9`Ej6CT)Xf$(dpfkB2kGBk*`QQ2c}7@p7gSe`q{juHtur z$IF);WHcNNkB7;Z`cz4zl+L~ zmBZdO<2;i}>^G0QBNt|iTz>PIJ91&t$PHCu`xgDZ;q7wt3`6jac)N=W@pj$sgtyyf zaZcYg-Yz7uLcHBW>@83#6yxo-nOQ{s*l%3f>N^DFD1<;O&|PSUcz&r$+OO zadsLH5x%ZjinO?Xa@e|N8IH#Flf%_D%g`sTp9oXejI%|#cJF|eLp%Yi@Df%WqGp8L%u59q+8o0ptPW^onKDT%n8gZw$k{{*q+bBQw0;^ym_aomZ0TEj* zkc(9jJm;hymK$t^q{8gJeBod#q!VTj7G^_Bt{u;TraT+LJG!O1t&8qS*6sANKeJsy zE9&!NC)2Oe#+>fi#hDJBOka#y-t1R^wr;;Ej@_G_Oz)OIk1)>kWx%?hCf=b#w&IrO z&xB|xeL=s$3$(oYgO~iXtntHG(~@Ft;bJ`4;*hKoSzV@yOJ^|cVz`8RB3`3< zY|L(r&FE#6T-oPd%$!JHLQZ@ZIe?(~`EcPSGU9-n1=jB7ud~pNgvng!%Sq1J9avCl6M9m7zfrxBX`fqc$>DE_>lqYiEpdtwYc9*X<47zxE}wH~8Qt1qrD^-kSue_ zn@P4)Hj%x3l%|Wcg{I?7)pE9lYk`~$?^?=PpOwU}I&I#OsH&2rOvFh}AStg(+&t)R z?saEF?yQO@Hl**nm_y_8mo!GkY?bPI2L=(vwbx%Jq{G@Cs+{`on zDcS34!&{0IpDS@%R)fYz5jl^RBsprN-P-wiyS3u^ z9A=KUu5T7(@mut@%X3jZ@2B~#tm^J4lq=fEF4AtoH1RCnB zlA$!~*ogS)4H+9R^~{W@_B4XLWuH;VnYLePLda#_R!L@I5bMT!fV9sux5)SFBW31R zqJ(Rfp%?D>a9RANWXYCf8u{-5B$0iGlFkMpDI0`-`3BD3QsRWmf1{pD^UCHk`BWHM zm_OW$-erbjUiIV{S(9-4tMH9tIapt#SnObF6CJNdvDhbYkq@8;snV}(@Bb<6IvqKNofdC_(L{Yg%=W7y zZ^P~R^%)fe<%5G|+z}k$SMl1BVAidZKfCVH1D{mocOK`t{m;<8P_!v0tN(@507Fno zG@A}U3oQqW{ol!q9^f1g6t67}a7rdDCS9Kn8KlHqTYPsgr74ViX;RL(7iqeS?`{A- z*5LZ|p_WVY??X>k$R9+7ya)jLtDbF+9cJ(5qqz9)d+6;{u$x~+y{~RCR}Kxk>HcPX zF|LDMTxb3cdkFNt#QaB>cES6kN+H@2@!idLw8ZUvVL>tp>0UFK%zk~CO$Iyf8asEp zlW6?%>gJE29QWY7m;6QJpM`~f3@@_qtMb2Fvx$z|K*t3eD_2ln`;*wENAEAQ_Q~}Z z3dX|z>R|k^xqi5CyK&e&M$gZ7(Z`=?Cb(Qxk1(L-0Rv z^gBreKRG1$%gBqU9cMnW*R@S(&i}7yy!t9pyXaouASK#w?t0LuJ@o&}XHSiBp0l@7 zV*wTaSwzJae-N`udMD^CqkPcCujuz?==ZSbw|(@$*bqxD(v-iTL`@ex+eP;_byk{v zqV4!ZfhqO0(W83X=uuspQYRZds!{Z@=uv&E&0fx5(1Y42V+VB<|G#=gdEapKxIw*T zemERGZZLY>n4`xH>Y9d))+Ia#dhBrYn5=s&q(@oErJ%}@^q8!B-uVkk$~6Ywe}Tqc zG91*bhZxUy8R1?z$A1}r{~Euk@&UaWl73Mn>+SwA3%{1E8JLz02H@|TUc(}j{T`kD zzWb|?9w9~pycAB=p|Tb2YUTm4Vlbg#vCNh$$QU~oWDOmrg_;(n#!f$3zSH838ZP4! zoZzi}IWNTjEua-Xt*WqC?9Khr1R@L`I6 zrt5S{ner-iN-933Qo@)izJ8}S^BbS8bbLy4?oG@!GiP#U1pjJSnydmn8_HYf!^`rTkx$2MO9~7o2=e7GlXhL#={y}lq-KoI}e)k}=+Z%fGck~Y` z_vT0S4=U&83i-j%?_hE>|DgYsDj8CCNqoC^SDKs=-abDWdHWRqj)03B8n$XaZnxS_ z(BJ2Yv=70+8i>kUHW`9K3IvtHx)??M=$$F5TmAJeC`zyV{wZpT!(;r>=&28SdP$2@ zpZS|LB>Xuk(>agZNsGtlOlGUjROGF28U>=B{*cje5PYZ zDSOOQVz|v;!S?ZrL4MA5mCi*d8&`(;JaPN6-vo8tEob>Py;w|cX0V@v^UxkvU)~RF z=5P=5QN{!#T+=kr!>N{Wij)m}BI-l=6m}rMu(ae*nXIk%=@PDi+YZtP+!D`nHTOE< zYpz(pE5ka=Q&Q77?}yISpoK@Tf24wM#lqj=-SK54D0{pmwm+ONzp32%54C*3`bW-o zh5EcZBve-+ed%1Gm=$7GR!tN#cUc(|Hq}2;O?Kj<+si29wQXb0p)q6s@~+E*0z; zmV^06KxV+9n1gxqu8?;ypQ_@%uhvrkRiv8nBAfaeXU&gWs17-ppGtwVAj8yI=+c^j z`&3_JZYi#jTC8~o=S}8}!W>bkf};2qk3+A>V!DmL-OQfT`IkrZlPcG4i=j{r^So}o z=Cuv@pZBubG9T3&=DFf`LvNT69ww051loNCK`p%7_UX+FV}MZjQuzK@N;?2~RuJQ# zx=K3$zF6#1?EvILq4{afp!F2$9-(C|$+QX@if1gMc=qcVR3p0d0XPj){0jmW=G%2X>f!<}9R!2MO4F zpysA|es=7)sloqx`3eBS!#g5@I>$1ejG%*2$sv2;PX}j=`sJmh`#-50Lc#ly*!BJ5P0CGHIfdRkcDe8J+<~)?ef=kD*9@u{`1Y|2ZBn7n ztB`-}LVYU4-fPsrpB}qVgPL8Z7Kc)HNr8prp40U=OulRRd;MMf33vBy%1LNF`(2d1 zl`{YEF3N4BjQGbQeZb5lHs0yS4O0AjtzOxmP2?LJSqABUQQFTw*pLT*t{x)8*KqC+otC*oH0kq`a=?h z?E?{ui=2`UKb_IVaA-ZGheS8&*~h#|7o(f}f}3U*+(e+x@JWZrxsb^OWS+93E$eM?XAH4387SV{Le>4v$sg zQNvU9#KL2lj*s^6v&(YQZL2xrKf%AXL%DS38auSPv$l55Sd&l6BC?OS=_by~+}V&y zcDI$$C$axv7l!Y$Vli?kR^p0PxwA3utd=tyM!7E@>EA)%H@jA4Zt@L?0m9Ul!3j2!U#IaDPxDIPB(74koef=cb_MP27*A4<$MdjcNI_AUy}e!anDx zSA2ncNV+Ro_lC@s;357>4NuQ$$2ydv*Y=>ul%WYhNxfxLb&aT`2zg4P*tAnOkKgM& zJ)Ox_)SKzh7W)G#OhJQJBTE5Ey{LBxKW23Y6`Z!|X|&_L-t9ZpyQ?G@P>k$BFR}-oc3r7dKrdTt+P}zE zK~vzdLq}*$dln#Q9$Y{yTH=()h*KUXZh4%z<*_NNIVT=1am(YxEk}LAIq_(TTOOa* z$N3-{6HW&W#PQlvzfJLIy9Zl;Zn0?BwVYMRfBTt=K|fuwN0DmkHZ2^K1xJvZaksng z(6+X^V2K>R&2syjnSP`6*GMOjj*c9bIe!MTVJzR0= z%nux;=OUbwaFkBMQ923N4iaVg0n<+%0tDpR8_~PaFz81QJ~}b?lr)ybGQvS0A9`l$ zZrq~#BinM0Jv#4h>|?b+_B7V6X8jme4y%#&Qek8J&)7Vmp>^@vamiN{Q92sD>ih8a zwsvlpDjZ)my#5D$xks89$dnBfxjtN?}t%c#}bllNcMu%ek6s=!wE-kDc zECJu?Xw`?X0=&Q2T5bLH$F8sb%K9rrUj(H+Skw!X-A66T1EBOpbu(CYHi)-iptA%O zw|kjWTwhfVvlYB0R-c(to1R?DUbu>lOEm~YI`$G&lOHjH@_n~VWsIMAPv677sPZwh>sZcBge-()OVp?%r6d+ew1o+_PToiAwM(DZfon{ zt01_>C^_3ac%mekf}9Q;(oW2_Hm}O;_;yM#_Soz z(}DoZYkY0doULj$@;kW(xd446Qu)HIcr0 zVj)cF34A~1VM-E_&B!)}+-VEH;rLm*tg8Yl9g4{_eaw*92R>@jRPE>NDC1)x* z(~|R)oTo=M99qD$8ip3Yq2i0`$whx_UX?oG(Pw0vc&YTZWX;p)&GFbej!Z#++jihl zX%r`ljWiOzgtzS$dE36Yf)Iw@?OW-cME1Mjms)$#+z+p79N%uC5T^lns)$iI7R$~$ z)KK%3vGo|j(I=G2?I+Pp#~QlLyK8wjC-H`LI*FI#e6AfnzO(gtyv_8MFPtBwpA2fc zkx^d<8ufRMeV-5S4&NSwZ;!*r$Km5+@a-}9_Bece96mk<-yVZ+kHg2ug@TF+Q4|A} z5Eu9r{+!I=SUf9ma{z3cxkQyW+X=aX)==HGh2y^HPs)O1*h%y zokF61AwOsmb!)vlzQj$(4&G9wD$`T~+Ha~azQ97a%q$GuQXB?iBV|mVa9porKBOO^ z#z%S`V~73dVuubc=szU9<@n`wm~BMWa)aF2+RykqY2j5|9GkIwa{XOgp0falz9AAE zZ)7@0RPB)AI3v?}ZSK6*$(xC%94JQ1&lwXVq2RCcp1G~>c1{Z1kXc|BkR^hGw+IUU zoVg);kWxo+L52(MSSf0XSg=v;`e5fG=?QYcydz+L-yGqHjIkzYQuWxh-5Am*^-b^P z=L#raZ)te&Y2?H&BPTX}ke?3~ULqroc0hDif&4p3?#|lgK#@c@U=chUmygfu4Y8eA>KdP`0ZpSeSy(*z-els_w=b#2 zvk>T%?x1EEtTHTf*RyW*u7^C@l!`LuqTh|bjG3=_f ziMAzGqvTmbi@c_TKkDYPiVTo(_caD}Zyi-8m{~^F2=Z^bm?Xg)q`RstTgD}v9UP+{tr&_!O zUc5TsIzo{P6;`?m&!NJbt~pxV74v;F8M=s36QJKK+1@?Xa<+L-aaA2<(kRYyU)MTd z;9uS0htNijYYl0pF#g2l^=9z}I17I$^upWnsLg!#l0lHaXByrQ%M(yezx&U|uQ4!p z;U9mCRs&2xn1Mk>r%pnHkA8QP`ioDQ3m{HR0$d{PkbZYsjB?XKVeZfAcZWtZEG&R{ zLcr$NMw>OCvk5$xTk=rMD_ANO{yR0dmc+(~L`U+6DE)2)YTZ-?EK+kXXS1Kvb7sH5 zuZti49Ji(#UI;6w4xXciRPX}7iXSfXtBo#xcu@BwIIu}9_#605m2aX1s@`hWtq{2q z)NS{&bLj@B;Wfl!dm{T4AdFoho;IiB4gEo|W|U&ankq%33iJiPhQiZ2K$PN#Cu-0d zwH!td0~VR@LwSW3ipi!grAR}~0*IJ zFslDVjxegp?Bv5H;HJ43C`0<*ZH412y`4K7gtSgI9OjosXRk)}yT#$HP4zpssMST| zQ*ETx@2maXKJJ1SlB1Rh{f|1}SB7M$xo-hORN`BxRDrw+PiItGfYVz+kG=y=uY;bD z^ydF#@w?v(o(eY@CyuA;gfP}a7NW*_QDb{ZjB?cR6zSe0@p*RXz2T{l-2U<6akEvu zd?}F)U@;Eg47YQUPf!hZEB4+J&R(I8l6{Kwd_Y*ebjmdd}M`gmi3VOC`>R zTA3iY$s0C&fs#iXOXJku1e>|DkgyYG?a{Qynj{SUrIPAA34x1OQ*Sf5$h_VhkX_!(@ z7^akyg(>AkVM;kkm{Or2Ovwd2q(Bb#kNEWTveHq{$X0wlnLd~kgPlZPP7Jo67sbtA zBnD$ge-QQc;hRopM?W;gUh51KgFQttmhwXl>2A|ekKb#S(hWiO`ZExMEsDkJvsaFg zf{ov6;}=|2!|w-?)x|6tZQSB5#>;_VN{!vw`U2fpzVJGvU*Iya@w*YuBvfAOewOz? zn*6IFeYj>55+)pjY(S`Ya?77sPTMPzfaUyaT?{UDr2H#U^CZpO_(zj}p9no8lARgZ%AG zyYYXS{O!M7N4s9S>d?sXr^8ifC+;1f%p-?eUNIS?PvhA`E;{e<-i|RX zv+T5O#~4sQk$feQ9+b&mQ+t_g_L^k(D4&B1*g?M4`XV}((F1={Tz{$~k-4ldkvXY< zHLQUPt>X-tSGwK^YKY&5F(ghr+AHbnnY;LDJ~|qDrgkJbG_2`J0hQ&w^$8#BU5M?Jc@s;_uYTT_8j*~Gu1pD?PjNDsd`mx2-(t`g`egV#$`S?PjLnw0Le4MMc_<-b*Grp}3j?XFI9XxXnDs47g7jw50q$3` zvj=ODG3~}jgVxhOdi>Rnp;qFrKI<)eR$sp4SxxY{`9#Van*(9;_M7GwGAFC;6@?&n z@mM7<>tT$``KyaZIb?#fb&5x+iE{}RCu$C1CoTK^hM{8neeIv@ei6FeZxo-y@D zOElIJQUOIs*|99Iyu0L%L!RW?88PjV%c~JX=9$fJ46hqMY<)FBwi^t6%S5prDRQk$w(pNG}rm-FtU*|06Dz3&-oJ067Hj+}IJq#m{>kz)| zVV+&|AX|7Z`?8*=))yOcdAFGZ3uncZh(>}l)nr~UO5Y==RIJhFfMnr$qH{)BZ1&~? zI*%(WPFB4W3&R>;8l;~IYF?nHE`h8OFRb9ES-t#xr7u4~;>w9DCpK%4pN|$^A|w7$ z#1RwO@C<>Ct$Vhm3a|d5x!8*Qr!TM*HZu|-#)~uzz&RO&0 zjvWxnT=SV6fT)>jApGb^et`E=tYSPYU^;kdeRkrQMAnxd$GP>{1!JH_L!jiwyZj$; zOH+3lH#M091Z;_%0|fkI!w!6^xc|IVhi*89amOy^EAV6|_5T8jUqkaox#7Pm?3o&b zDJ@-VOdM5O*!Af(%&-3kKhlQi`u82 zJnKpN@GPW$FbJGp^Q1n;HPWKPA&}AZB>kIeGM5QYDOc_%Z z2aWNO!h!KWK){e!)q4wX5KUo*A-5;=+^}O1a^LF@(SJqb;V9ozq~qQ7BJaesM-Yam zkY?r?g{O|fC^S-HbjT=dj^Iv$_KaVzuTwDon6c!_BGpSrR%q6$2ziChR{Uo&3EuFI z<*A}cAJgh+5{FP@zvSw>s^%s!f#mW_Zf!1?6uHJ91a&(W{k_Ihcd`ao>3RO(lTdGt zKlm6YggWel!R>-S*lhekJM02cCyCs6``ckBAr*l?*c|c)FOGITn=XcCh)=2C**j^c z+Ln_4zSwzv`n|r7%mSyG%8Zj4aS7fs4I0NO1SPM)G#aM>tRqJcOrQC9?XG$+_B9f* zZ}sKs_TtKkD<@~28@7eQgXDg)uq+wzPv#*XIewv=#w1IAUGzO0(wz-8FN)-YnjJXl z5?8DohwOr1;5AEkLhl`zOaO-D{Tr zr?@$Rs%O4%StR1-3CeUGRtokYK2bb^#K6jdjN?pA5r5Dwf3cW0z!a1jdoYSrrQ3Tl z4B3jpJuYugq`SQ3PrxaF?3W6lg-AGr&%h|_gGVvSO7@rt2ys(kC_L%^Pvq`U4{TNS zSHBTC>=;FA;Ac5JvhcOwcY%dp0`G#aFAT>IjPW0h5F)@E4)_<{Qbkajx{j8w6{t)m zgJ)>31~FghUo^R_FL??#C${j4!$6{ zn3GUH%T=`TWdff~DN`BAr*DYKrvmrlF=@rlZ(DL)80Q{c>z*i7uJz-IoV-dXO7-jHni@|Q(kg> z441zscKj1aP z@$=i}dHk$p{Jh8Uf}IaR z+uwzk>=%wZWE7hD_-dBoAtMnQi_UR}%x8~3WT2OSA1_je{`+`2F?#?sq3>n9IQ#K1 zCS7;quc3IhwXMIlWyxUBCfl-8JduXT*PyOSaMqAb1GVgep-xczQdblo!vKfVop$DD zF4}u?N$Xfdh6AO3<_9s$9luu_;IN2*H@Q2_`$_)FmydF@6)CviS-%Tb(asz23Kw?& zqd>chSO0P>=T`OJ#?>X{{9nG;7^-gt8{fG#cuSL7ge=n<( z-;MYo*?*&}f6@@qhusJ7<%9RBb$o)}u!XXnMF!o90-h!+VSWfg4_wX;+rEMfgkgPK zdnuJcUyn5NLiTQ3aNXZ>UjF&;ExY{m;w@qIb{)K^?g+crZ2_YhVv>la}iUZRs)-QAQ9@6aS0WW!j=SbJu+D5Nd847DMu$ zNAG-sH_Gz|u7B1<{i71rKdW>76ZWp|x86P4{m1WL5cviDYptn`TJw>xM~~A2XZRg9 zLpNG8&T;kz@A!R>{2t+GVrw1K9-7H(jv0;|u^;wteZ7)7wIQ9o9^-(9^zySfq_YiX zDe%K8ojfqxP9B-Z0oVU`FFzS_&RkyomyK-Evnqni-?Sw%cH?gElgK#Y%WJt5WFJ_g z+q2{9R@nf)n8Pvx#5KOsb zXDTNrsJn5MriSju)m)$&o6v&nH`$H-RJRac5>S=hMy+~O^r302bxV4= z>s)im>UU2xCjuO09)ypHiDmAn-%;JmD|w1a904JsTFghuE((Tu@pjxKoA zxLhUS`(%vx@NFxKbB)L>_T98njmKAg04*TyOQavr$D`X9kR5)Eksslap zt=UKH^JgB26=bP4yNnlKkrGx_e&&IBq$KsqK5{duAhWm{cY!zo^@nE?`tqks?ee{M za=^~mBvw<)%xE%PqcsKcg+yB&yNLY#Kj@_(jCvhSsQKvM%eYFE1dJw4ZZ)-xE=6vI ztuaGttK?P$J5Hn{qee%7;|^{nT4*7HQBTC?{>T1Rc$rarb->W%s*!NNEgLYMr#j&Q&@+>h$9o?1bP zta_7{luc!?9WZ`UMwPwQmMg2uUOQm?q|7RN=UT4pDtp}l<0qHUR(;T#?Q?XavY&qOq(!^X=` z#|&uyjY+*Odj?%!;OeyW8#Tsu_*gpGIw#om^cE}FJkB34V{87L6>!SgqntlB0hgrl z^;=BBwZ)x2?rO%L$7a<(Vd+(A|FLw{7RE<)zqN$Eng5`RvA>+tj=*ZIJAZuf2JSn! z-{8(4U);-mKli=i`QwWba3v7AhZ3&WTbu`>Ekn)!8#O)OmRR)@J}zCd1NqzNGsqSB zGsrfc82vuXgpUm{kxy~}`D%9n`Qhn0S~`P0hP)%KA^I zvkld5KI7L)Gw>O^bND>+K>dt+wTMQGA;I3cORQOnC_h(YB?p%t3R@nWNlHxnG5Z!x zWn33(?Jf}3@!G#V#R@qyZ7yEc&!g&WWN@1MNAu^gXls7{h(C1PM=`(1X);cdnchHK zAk-mZR?viBgSz~8P3MK)z?#2yv@l_I0UHG@6KSBQVs-_ia5Bkx1~Na1&);t0uhkw>0U=PTjQHeoj4 z6TA>s?9OTYru?^3K9($-$FPW`-D%%caAhs*h;Tg}Y+lDD;z|OK2Z4$L--so-xlM>3 z34LKiRts3&4QnZ;Fh63X=1R}xTftOo7mUb8t0ZhBX3q;gsm*h*So7WHZe7)S-R4m~ zO!m`onCuIa-NwE+&g69%rkfku>Cy%(Wwz7dO6uQTs|N7MZo`K0a_jv~P;of8S}yc( zx;+o4eA~6$F&!3jNd*n!9B*<-v5ZSdPTj?f)C^7s_ttW8_?hzGye47&Xwx&gui2{J zF!3V(E#ky%_s&=d@^Ca?SP^nGT@72$aqi_bIhx&RO9GAg-JvHi4pqeP&u&!5wDM;I z^~;-4vMfbw(YP2xLS(?RY2dVgzYZrlhyieD!-__(H2(74|+!hoSy{5|ajS8%x59+m1*+8((Ef-BHb9_uZ1qDOzL6{i6;2b$MVJC+JdI%kvM z7}WH!Oq-QkQ;2KMO0{k;Nmun^BJe|p&*MIVqPbLFtlx6$5l)AHa1sE7kVHtN0R+*j zxx|R>*!4(?b{|xT@!PCP1)^X2*D<1RD@62dHu|7>edz8(bc$Nv6W22!cv3xZxUTZx zdYR=E;krHPwhdr}>tX$aw-GhZeQ${GUU0V+k38@By9d8X8A*9um#n9QyUt+uo4sH5 z&kY=^yJHdwqYM2MhAwodUj2*Z2?g{)WdPd{7XzCky+xea*qdniHTA(R{zRom$et zJuO^vr$-pVlxGJSzB9E0Xs(2a-L)8idY`?kQ5PR0zE{RNgKcDbXZ;5g34Dx8z5h-+ zIQgEXAzV^dbyF8qL$77)Z#h&~)0OzaTLPj_EF?#r)eE4%A^M~U`o(nazGBcne`5^# zu0qgvjYeDvZ-b3m%iNQr5$SrMzgE3)&=)*_{%Xr9g1$ZJZd2I^`h)UcEO|@}e>dR< z|0nqlOZC=ZrrSf#5I_ktR;3b|X zKbhZXjxnkyh8JsokKs)n(T7A09a45RJXl!d!3gPMrr`Z?u2#fS{S1kvk`PPFDT1iJ znvYT07^1Avqwy`8zEEff&$^li5^G)t2?1!$L&2pb{^N-?-P{YhiW%X^BfFGzaQ#ED zn;j$z@NZ;m_BJj1tsMt3Zb{tkmYSHS>Zdf_8scKzItGj-;K{@I&ZZc~+Y14>-2fQs zW4i68tKp%zM8xwHvR$lR?=!1WfCRnjWk^$%gr-_f5rp;Oe2U7(5KgX*=W}FI5lVXe zmkgkZHM@YNniQ7SJ?T<%XzA1W_bIo<83AAyXpPAy07blgsdvp2)*11jBF6 z0SSK-F`-8Sie<1xb%!E7NQn4Y;-mPD-_7w+ti7L~4shYK*nQQLnN zJyS12dZr}w%yNnVqRs=5xm;p^yw7@jc*c(f4abkS-k*fz1DVqz$W%}jka+~ij3EiL zvr07=!be4Dv^r|^xZtz(d-2?QPtUkiiw&nfdBbY?+ znKTMM{hVq8K97oNBY8CVs0fV?aj`~^3qJoNQaN@tJok`t$N|$ zqmGK;SWXdq>gw^~k6;qPXWc0HET$^pvqO}Jw0e(I?PVmHh+oM=){l$+k(>gfjk=Y@1|Hs|cWZ0L@?P%1Vfm z;)5HxuAqK^_LztgN%6A<^jc5pM0M1OW5BBzpAKIi!|SmR1YSw?BBV!3LXRw`2wv(v zT~*oRhu4*ri8Uv~dKPXVV-CIlfIxF^2bW{+A9+TjLtNBoewjZ)%w(##c=z4^?HELl z#~@<0f85s9QES?JF7UR0R4+n$q$Kpna*E)i&!DTlT#gq$FCBaTNG;kwa`|KSk9!u{ z{_(e5-2U>ffZ2uIO`JvX29k%&+$Tlu zNapuP1@m_?4`_A?7i;zy^A}=J0HFnc6+`IB7(##4{!zUM>7A0$JIg78kiLPg&gBw8 z=zaN#5G>k2p2#dlX<8u=mB+-5$^g+$5jT>de6s*P6|T|hsL^A<2eMfJpBdN1@Y(r+ zz$d9*g!D~G=$qvf!ABned{p+h;WOjMvbT%YgJ>0a6Y#`>_tPU-^-IJYT>X?N9?63J zU;(^Th)xV~u}&NVUd8+C)2@x-_0$IfuU_>cq<2a}?<}VXUit{Ss z>e&$0!-kGzp3+CVBISnZb3gr;Z0O4JNE4N5(VOqPU87J$Pn3k7SWeN`sV2T|EtmM~ zY`bP}n7*K}QI|#`X*HQnNY)ST&eTHLwpx2NF!`{I@`|)U!DcCYqACl7YA)~t=XWm_;(g{{!Z8V zu_(;qF2;NA(5>!!bTyKv(VxK^=|9)p&AR!XyBWMLyj~GrzZza=hSv+i>zBgo=fmq~ z!s{o(>sjIT)bJ|(joKOOu7I+l0F;9KsLywx8GMT;yhr(VfH!!5e7iV$eemaTUVjAN z!Jou=i}l*=`CB$~gEz&u+Kmog7vJ{7S`A(i-?r;^R(!iyx97Rr!J0U`9eOqR$@sRG zlnwIW$Kt#Wbz*FMTdUhQ_;FuWt4{nbzSXvK@X7eLL#=kjw=KH;MSNSU+x78ng>HWo z-}cir*Owp0d5hKE8{*pv-Tq~K+poqO^=HyrN%>X z)9s`jRK6d!zbt;%LTa!vzHO(MuBfCWuIDZ4`MKQY`H{%J)cK>n<<&lxoV4FIiSBv+ zL(VythnXDr&X_dT9;bpEF|>_CIX0{(qr#ifu%QW+>M7=|z5`Wi!}^>&W;w00GdQh) znQk{@Q&;6$;4wr4>Fno3FH^yyTGZ_=$_egSt)7HNfKJ`6qOrOi1HdIJ7}~!yNBnuG!EtfXyzFKT1v{3=`~t|> z-~?ut6n%H%=WUgg)A`dKx%DMjfZkoLdsoU@k`3=iAypbm!uc>rGJ%#g-V$=K#>=i) zhyB`0)GmwG;(3$cTJ6^$Z^Z$j2K5XNi*-dH2nV&CEquLjB@Vx(L%z6`%+wrO{$Sh= zrvlWBOtRZ$Xe0Lcj+W<=%Zjuvuf_(nSk~J|HSG6sNN*)`n$?G9RAj zU4P8;yz5=rTefKi6fB5?wcIm(1~<5C?mTXC6*i&5F$BsQe5)WH;P>y~)RDo{j>!Gc^om@AwdUtC5_}>gM!RCMT z{n7fd8eFjutWRaK-z~#2G%kH(3dpH%{IP-aSi~;|m{`Pr%V4_sTDxqNN9nYGk4Sjl z=_2t43Y;#EJ}1sd;TToUdR~*?MMg2AiSoOsPS9#P>*~x}3lLScSD&@k>$BDub@h%@ zG{>_E>~ve-#dXx{e2mVTzv7%n^>d43h{0i=*X+FUlv%;N*RWIFk+`jkCz)Uo{y+OV z2gZ(cOnnS*AXDqe!L827R%aVC^)d7naZ6;;VFUhHz3sE}f;HVI#MdPjEE*R~6eA2dE_Bx%AKSGB6DcX;Q9oyo_ zziTby?G=o7E#vJKjCU>L?d8Y2mhon_9tg)fj!)V>db~^D@%&P(%)2?cqw!wR5|NPA z5eXR`Cpfd(jU2-pm3`lZ^$&52LDX;nU$6*6p>p4~HV0pXy>_X+VzkZS#{d644oTvX z_NA*45aM5!6FWg8I})ATS;93uCDJA;$RaDc#}{)hls@hqZxU}|UkR#s=N1X`hc zdDx-l)-lUO{HTRuYL#ZAVSGV&3^BNg2Uav@mUUcav9(_1miNeftGmq$d%%KEO8-K} zxrOrZ&sx+&#@SjAn~a!(qC-VDxmT<+=(~8+zOB1$eLmTqPp%7--FDul@C;3!(ge*d z@p-afMT-FiKNW%R(I=|x;I}CNFsJ(l|@7CcOjX+q%xu2AN z|5U*~I;JUDH^LVigH4tCjHHP9$L9zKpbvKCxq7%JS}uhQ-|D-(xAG02@^$#d=< zP7KB0T|r9!;E_Ubt0?SoVYM-++d}xN6>z78O9!?M&ouOeciZur?I|`2kP+$*v5%zrF;PS8;mEnKg1$shF>v^s=K^juo{w;`D8^t zIVo;uI;p}D>nPkz7K~Vjeb)PoSi5U}0~dV-AXH9%#E|U?91NB6!=d_nk{T+#6%W;V zZX(%TG@)?3)TSYe<`J}P2<7#CIxd&bvnEH4nkk@zje<@zYRZa6P3im_Ar(w#H?~-r zjU9F=1bjNX`6kQUYyb~73!Y)kmgUmnL2N}rfTZ$5Jkso8qBk(cK5{OCDK`0n&6-`JuS??57r+I9}s7{m=L@A)6RA;o(3GAcl3dl~he8&5EH(wJCam$G zxNWzYiKolpIdPuGdC=m~!9}~#A9T(lkz2O8>1$fN}E`$hY&JXi+2*P(@KYF?!_NITB0q zjl3ta6g8q+qDGF2G|Vx39`7$k@8{NoQes{_zEsT1wFXZ`V8kdMZbGY85&!alnH`Vf zU(#6x0!PrWq#}B=*1aiigMk+3b5WIXK6)_qv9Q-0b!U==olH{QM4!{HX%z85E5zzl zD<{}Eol7XlO9zX^9I0p#52RsJ?<@31WJ(V)4*LRyCZ&HN4-_JiiibRqwH`JZg0NV4 zxWwS(4icjZ;!XQX*5G`yC7--0Om?@eBUMQ8i+G@DxR^OD5g_#0{|X*R0~uCv?pY|6 zi+CW8Pa&Cz+y3Lxlc&-<*I{VW7DFXCx!2Ah>r zxMte=zyK&eTr>CRCDu&66|b2C+{CRr4o8zJ8iNfeVn=g0s?t3#8V`ZZ#-rA%v_%_o zEgA>5D-&leg+t<~qO-~5V~)zkgg9P6KpE*?tMX;*151~Nn9&Py+i2x`DW`B`jJZ2*ZpMA3xEW0iaWfj8Jm+%mC!{z&7B^EoV+2J>yT8UP8dpg5 zT2y6$VO?Avl@+D+P65x;5CRepH3BqO{&As7~)jj}`-6 zm%e427N`QA2Z6xgcG!#vTagdADQo2|(tu!GN{NI_NrUX?eO?cu~j z26A)$vvLcqFA+=h1=q6}SMo%*09P{pc~eHs-(w=m@$f_;%_u+?Y8TAXK6;;sPP`}D z6tOF+C>rA!eez#&Bo^fxc~4|2YDBd}jT{}R!hPFO<=g8RIQXDDwTz1|(#noBdzHJj z)jN*hi6X7m@A0nd{i#N|^OXw!kt)2$m+b6(?c>+&{OQQZ&C0Md1c~~6K2CV9>v%(m zfvFTvx+vPEqFvZe-CWg~sNe2q{yAhb8vJcUoYMR@e>d9+Y)GGcuyCp1LLllrC4?+0H?EHF9DnP7Ah-?p z(|KAb?@DuTHc^|@-!Zj6sMW-`LXG??ud8jLQV?!Y9_18tgwo*`4A_S>qt2cmse0U_ zY;CP54vz(Jp^O%X=$TjWOlYNND;m9Q^IQbl)A4;!FMmMuE9$eEN%e^1iQjyJ-==PR zL}{z`{H7_mGHIGp;rZz)xVQP%lw{)PTO^yW_a`#)&P7TvA4GXAYnbZLKQFU$zI1S? zgQso>Q2V0nW_{7IOPWg?dkZ7x*t%f_ZkwD>@0J{bcChnd$78yzF0N zbm6=gRN<@XcZzIA=x(69-t$Einl~j@X(OJgc`I@IO02(d5@BBm)0nQYH=9nf$VuPe zAvi-IBSI#jT^m9zh4&3yqKurBSo5f+0YL#v-o_nG$*<7ONRjfKH}a7Gw4%yPeeCVd z6Pu>VSB>)&Kj)E=2lb$J558)imNu-O)91K)EPaaKs?sOWgApC0Q~qiWp0aeQJ-5g9 zlvMpwsLiVCpWv4?zG_JGOS;<9{F2674f*_%o@;4-NiVjvyw-5DL`~K|5xT9}vixsz zW2NcKrK+|j?)ZNJ54t$CMkfhSe&}vli*+iPxNTO@^g8;XeK($p2Jlt<(@aBmvNLhp zvpjcxVj*{1qqo&h^g*mDrnk24|%PFq0XplsCk3=T>b|>EM3x5@4r$- zlNnsbcH)ev>CY^q^?8Q#nW%mAZ`~<>+BWou^7szQymR8xYviiCs*{d(PfrE)+otEg z*UK*L@%$w$R7-ogLi(2WaqZ*U&$XZH0M`MoLtKZr4s#v$vY+?-YT#1K&YnM<)<;Vt z8A*tg=sXzT;sp(>qW zkx_oX!a5spcbUCg>rS+Aa$N`1sK@OqSpL={WpBZ7(&lftjG`T#p7CE#`M+g7a6N9* zsv{d5DMl|Fr5OE$x;Dz`6!X^nPT8E@Z<^D4v`(?KN?uP7Sa&1yA*_6+=T0wN$y_Og z+6@}kdGZ2Q3k5MVDoizP*$eQ`6_t3ktH7%r zt5}kAk8X9}D9TnJOqmKTtJd;0JzUb}O{w(I?XsjfsG?O4SGOjuZXK{R1S>6LcH%dJ zHj+HWIG#(m^)R{d&5eZJ^`ztjgI2I$zIcU~$E}O2e&zjwCSG zz^aNwQXe5SL7%N}QPub|Q+e#nx#Yh|aLa#J`m^RRM$vw{u1S1z{ORwcVQvYittYePsK`OrOxaGB4|t_YRIw`|keRv@93;pU`?d+Mm!dSEEzD*Kn~9q@wduqxp|v#)xTO3!zM5DVgyZ|q>1;kBk(Je&A()>2?P~5)zkG4Ym@yW7@s|(uj2p9$ zis61g_Tj}~WuE@0vj0yDrEx@h-O%j+skMPk}-$%3Ldels8NImuJ#`zF2V-`(LFuy*9*%e8Uj zTfgIs9B&!tA9?27IO?qo3uWB7+!PiWHKJZb4HcLGxJn2TQmJ+B(x~tML_2K$Ch_92 zKjAvpnRV_H+PS2%*dFKmPfv0m39F$SDj0S{g%P4m*Q;4GYc@GIZN5FyD+Pzg6Cv@% z)!l7>6TO!g+t+p9zFt-FudeI%f3a)pum7j6i92rKED|_Q{4En8_DDdWv=$!Ky_j_B zU!vJy{4IJ+btzn$%syH6OsoDI73P7N!a>XJ@4}AH3?{#&wm>RFhLrz+zz4sMW!+=O zuiv|b`uN0~?4rPKaPMz;tuGMT;qchyUzEYprjT3T>iyE;63A52){GO^IM<4e3H$oqJMjjM>U@=szy>oWla2vlTe}`T$Lc*5B zZ9k+R;(wy)T9^HWP=Q6ImgnKR?##utw0nVlpYqE{3zsB`(Gnlr*{8c8*u*6rwDs5} z(7;JR;Ls;|a{m<>$C9i@V5#`;4upgMnN}ly+d5>dnc>3+*QfPI@6)`(J{dKOy0vN- zeZNyEo>=t_gtB!bHdDyFTjLBkpSj^Iq!EtfZ4?BU6L-($YF!_ElFwRubaXiR$pu0O z_KW|A@c{|h0`^Gf{6_dtxs@PzTcS>Ly{9tjJVnd^{|3%^6@H<8nZ{Ib;c8yzDBO9& zrxZ|+Iy<8xfr{iRM(qbFl`kP!u}t;AKd&PR=C$kM6A$VY{K;<7ioIjlYkmH(`FvaR zzkw)*v180eF`V)Tt2`Nb*AcUVf|eYjspu7QbX!=)?NAsx6COve?UUPOWC=@_PZS z!NOu%YAcS*RhW-0sj7X>lv8Yf#@~@@-Gd?LLB5gY+3S3%6k0PCli3H@oA17{oY+R4 z!;)Ln98TOO+)4$1P0Y5#VO-{y$NrkUF-xb?yQDnka!Ef)j|(DSHuloNr`Z%okuQG@ zUSkmYb`xQJ*@7RQ8Ju@9fiK^w#v|;zQ9Rd+c?*xP{KSzk#>Vr?no~rExTC+&(MF> zuBI=;Wv&-=@h00jSW(lHSkphug!rTt7@QIxXL^U+!GF~LJ!>j|dtRU2C<5Ey|3d2v z{W3aCznqszl+`S2@JrLxhuAKwVEu%gg6YnWRgaoo3dK<6CW{H3Ct3 zQ$boo66Sx5kA+Zdr7L&$kMM30UhVp>OVsyu1?l5}gp>h5 z!h}f24T(IOz}Fl%P>S9y; z+Faq8%N>;IM<6p~P!G=i%wL#5rvJVVkr9p{yXhGhCYOB;X>UW=UOVlrFKRDeN!(t0L3`~5-`7HWYs2;qPqpuBv3LVV z!gFodUJLE5E^04dN!(sbL3=Iv_Kso&_BYn5vjQtS;zQ4afzj-DZQJo1cFosXPJTp> zsMh+CKoTixk?%?Y@j!1xV_#c@D`2tA{kc!NL`QD2OSI=sbBUJRhb&R>ayWLzfW`hu zO+Ip&PIpy+uEg9)1wS|3%}T^G3zzpjI>dE`=Of$E(Z~zSa>=-FVIdLi+t$-F7Nmv& zURg$zV}&RUUziB44vc;&mAy-A85l&!4{@Ch{d)6MDUyrc{%9el*Zrrvv?+BVnPw$d zJ=T1J_LjLa){OE0W41&c<(xk|Y8U#B=)x^s9jc6P{1alQ$HzbU^ww<^1Z5GRCH{zR zEeuK#e-grvBM_0eU1vnyTdE*@qX^z!_F@|72EJn!jr1Qm9{K0BWnqD$_e~!Si_JHe zo8$_I>Ct{k{Q)2-tSN8?KsovEG7^)X)8mS_^Sz_}tJhs#cNzZF)7kIYS)*0*L*Zq= zl+M;zAm2 zH9i5)xgg=9i}%njSr?00UT`si#19fk{O`!b)o>U@ya!3xSQmOdao?V?OaF}Wmsjxf z^=iGOWaDPd+sY{}v zcUuFxP_M=>U9-#LW%p!io?V$FZbD`0ZlY!{;Fs+Qui!Shs{_8Uu`^TiW+J$P51tiF zM6)?0hVx3;)yLP5ORV}GU9`N`emK@XSRh7Z!c)wb1^n{1ajPB8gM*tXIkjVOIeZ^Q zPE?5#CC^B#In0x~;3C4FUwPQhX>s)KGs>V&bOSzYZ!-O8ncmPvl?IoTcs0Gv#5?cA zJN7|FL^jYmpH}q{`l&}@hnGJJJIsEQm*))db2+^40*_Q<4~e?$P-5-235IrlbQ@s;}xG?CMCms#|E_G8}Tb z{wY57gqQY#s}o+zw zFmCChl!AF0;-()_NbQ&&^70?u{}{jiwnJREof$5qr~iifi~oD|CG(6Y5KC}qfI(zI zi1!WJA!dT6DYe?Y&DBFCyeLttMEa_O`0#F;6z>{u#{d2Pk#x;)V$FIz_YV@*dzUtu zpNc~c{fGx%=L;Bfglr~HEmp@;0+nVk2J-a7u6soXe~56=WCrsgt4;^tR_Sm6i7P@J zyrXrUkTO%M?SWF0;#6dr<+y&!&fRX8!PzimF13hM?jQ2_7weaR7oU^|62VB)!S~CE zC6W|8;+P^=z0^Q_k{c7N|2w&}gK017Y5WCv5L@-PDjvor;k61C;5tdyf`UyqQV4UX zt15UnJuFlmUMoizUQFTY9J<}BlKHyc>(#3WN>>=?WN>Z-1Bku@+Ti!eGS%jc+@Cmj z{m5>=@4$;@&=s@*b*b$6RwnucN3UY|&4&XC_f0APN!;XP)|->49?oH5#87YQ zE@PMS@Yi|hR8}JBsv&|wjPri^(|>aRK(9`(rtiiHk*-xm(HtK5?77{RwH9`zdlFKQz;__X02PDAC^pj%c8@1QmlaRkJOz<}r56fDFMEPOTN#74 z(m-1ogSHaT7Hp#&bl2vgyBg@W90R&ucB8(|%U;A5|DxnF>?ShDwI#g>q&&seM}>q6 zCyt{*Ay6VB33xfQGbsddddA{pV$Dv$Hry=cqp?R@#Ltk(ecau3I4lEq;+x=1QAwM#j zo(+J`Y^)JFO8vq9+S7rF#g*E$B3x}~FA$wBZOiA?zCfUxOsjU{CMi|VuuIAICSW!Y* zz3bvciPE_{`y^Ly3CYk_X1wl z#x*}SMX<};HFG3Z;EaLnyeLAmCXs8PQ2Yxan2$=@0f#G!0`(5U!{>O3HN!ega?3WM zdV$p1IDumiFfcIO^IgELQRAEMBhXPFtv95FPK6x|XMpQ$$OqDLZWTaN&(#ZmcaEhY zy3KtypVm4S)!bLm%6qm*b!%0v8#a4=Fm$FEuffsca@2TsA^k+=mQ4ANFj?4gmuE0W zddk=yxX5wf&G^9?X1LR760H#ya*T*1je=kbuNr#O{$4q>vLMGy;DSf6#3(YiB_k3w z(jW0RMxUI#PvnOM{|zrYmVWnp3a9tX$XqQ^{a*IcN$Kpe3dz1YU&FxS?UcVawc{PH z^(8a2NUYhz4A_@AwV`)bP`F~E=yiKX=dlNwpj@m~C|SOHVs?X0ULt)6>ojmhZ#in8=t|BL{QaR?DGi!G}6($$B8LcQc#LPEgR2@gxY;Yc zaIm6>1rL$f$lOZiQco&74<}C9Z%;|)4;vKDrgstYJ?`+LVZ(9Ers?l7o7NW0kH!hi zr>Y6@T>72OrEl8?D&~KVQr_l8(qTYjT63w&e)IE)TxJis{O0Enxz&~%&!3;9YhI(o z^&1kwL-G81<#^}MU_5_b`9S86EFBs@*!dGzc^va6Uv}si^XGp=^JhTwXGJ)FDhVQ6 zHFT8u(^$&ZT8;}07%iugS#rRey%JsgCnOPq$k zuUT+)7fvsUZHyepbUEq;BiA*q$>VuwNH=GH6qy~( z)^o$;i;Z7I5fwPE~E?VZu8;CHQ zxbLO0OV5V!DTN=EJ4Ntr5?rn z4-RyOu5$c!Y9Zq9A=?~vQ_ZI_n4QF-?a_HdPG#ifKp0i)5a_v)tP=sLr-Pp^{&j4@ zd^19Kx4ZclHh8>bH_=PcrgqeL7xPEAyt81G-~JOo86b^Z`6*|1){Fd{<6q3 z_6DA@HQl5aLLr3njIE-m9$g@6WDD&o7)!@CR_lfChV=|5B8CkVjvU-f*AsV+IdpJi zRfUHBgod_?!Y!{mO^<2|er=<50^cswrD`z;FUu#j!3=YUsXv8F1_qwU@H_0IgGI1epBnXJQ=BgHL7-ZrBC5)zab^KF6d)oy zAT##X^#wqtt0t&+M$yiE@V~eWVeEBma-(W*q6ti8;tl`-%i`6@LwJi7*{p2$)_Xv} z3goV*Wml9FUV7W%%)b>tqOS?%L!;!YXhYih_LTnw)+MPdP7bn-wMSspxm!MJQp1k> zzC+;%!J!3amRV2H&FhM~m~RH$Xm0o6H7|d9DSga%V^Diff2pUQ^4#XU=^3 zm(_YRE}OoLm*#K6$MO{OUM$tHR5>(tb+4Db96iY8$z|v*KjF1rTvnE=D&`kZ+ge

    cx|1kYt?`5Z({tLnz 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

    )3thDM&nSh6DcD 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�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�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%0ASoPAQbcq_LJu;;s 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%0ASFlD{;hSE}!`|%87Xv>OcuSyFj|eE^ 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

      HOL9#z+A(#GMnC!YY=|hzds{fEfPCnx}TzG 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

      3oMjX%Nw_n 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

      qHn-oV9aDSx9t{v;*2Y;6_=C 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

      McB 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

      s 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

      j+kEWLOq;M0r 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

      n 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

      S*ky3K0Hx`M#aJKfFYMsutxQYx4%t-S3rU+f?k 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

    mOC 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