Skip to content

Instantly share code, notes, and snippets.

@SteveBronder
Created December 9, 2020 07:21
Show Gist options
  • Save SteveBronder/a3dbe2ea7c8a00c6275ec72c6829a17d to your computer and use it in GitHub Desktop.
Save SteveBronder/a3dbe2ea7c8a00c6275ec72c6829a17d to your computer and use it in GitHub Desktop.
// Code generated by stanc 51d1957
#include <stan/model/model_header.hpp>
namespace glmr_model_namespace {
inline void validate_positive_index(const char* var_name, const char* expr,
int val) {
if (val < 1) {
std::stringstream msg;
msg << "Found dimension size less than one in simplex declaration"
<< "; variable=" << var_name << "; dimension size expression=" << expr
<< "; expression value=" << val;
std::string msg_str(msg.str());
throw std::invalid_argument(msg_str.c_str());
}
}
inline void validate_unit_vector_index(const char* var_name, const char* expr,
int val) {
if (val <= 1) {
std::stringstream msg;
if (val == 1) {
msg << "Found dimension size one in unit vector declaration."
<< " One-dimensional unit vector is discrete"
<< " but the target distribution must be continuous."
<< " variable=" << var_name << "; dimension size expression=" << expr;
} else {
msg << "Found dimension size less than one in unit vector declaration"
<< "; variable=" << var_name << "; dimension size expression=" << expr
<< "; expression value=" << val;
}
std::string msg_str(msg.str());
throw std::invalid_argument(msg_str.c_str());
}
}
template <typename T__>
using var_value_vector = std::conditional_t<stan::is_var<T__>::value, stan::math::var_value<Eigen::VectorXd>, Eigen::VectorXd>;
template <typename T__>
using var_value_row_vector = std::conditional_t<stan::is_var<T__>::value, stan::math::var_value<Eigen::RowVectorXd>, Eigen::RowVectorXd>;
template <typename T__>
using var_value_matrix = std::conditional_t<stan::is_var<T__>::value, stan::math::var_value<Eigen::MatrixXd>, Eigen::MatrixXd>;
using std::istream;
using std::string;
using std::stringstream;
using std::vector;
using std::pow;
using stan::io::dump;
using stan::math::lgamma;
using stan::model::model_base_crtp;
using stan::model::rvalue;
using stan::model::cons_list;
using stan::model::index_uni;
using stan::model::index_max;
using stan::model::index_min;
using stan::model::index_min_max;
using stan::model::index_multi;
using stan::model::index_omni;
using stan::model::nil_index_list;
using namespace stan::math;
using stan::math::pow;
static int current_statement__ = 0;
static const std::vector<string> locations_array__ = {" (found before start of program)",
" (in 'examples/glmr/glmr.stan', line 42, column 2 to column 22)",
" (in 'examples/glmr/glmr.stan', line 43, column 2 to column 17)",
" (in 'examples/glmr/glmr.stan', line 45, column 2 to column 23)",
" (in 'examples/glmr/glmr.stan', line 46, column 2 to column 24)",
" (in 'examples/glmr/glmr.stan', line 47, column 2 to column 28)",
" (in 'examples/glmr/glmr.stan', line 48, column 2 to column 28)",
" (in 'examples/glmr/glmr.stan', line 49, column 2 to column 23)",
" (in 'examples/glmr/glmr.stan', line 50, column 2 to column 28)",
" (in 'examples/glmr/glmr.stan', line 51, column 2 to column 25)",
" (in 'examples/glmr/glmr.stan', line 53, column 2 to column 29)",
" (in 'examples/glmr/glmr.stan', line 54, column 2 to column 31)",
" (in 'examples/glmr/glmr.stan', line 55, column 2 to column 39)",
" (in 'examples/glmr/glmr.stan', line 56, column 2 to column 39)",
" (in 'examples/glmr/glmr.stan', line 57, column 2 to column 29)",
" (in 'examples/glmr/glmr.stan', line 58, column 2 to column 39)",
" (in 'examples/glmr/glmr.stan', line 59, column 2 to column 33)",
" (in 'examples/glmr/glmr.stan', line 63, column 2 to column 53)",
" (in 'examples/glmr/glmr.stan', line 64, column 2 to column 57)",
" (in 'examples/glmr/glmr.stan', line 65, column 2 to column 73)",
" (in 'examples/glmr/glmr.stan', line 66, column 2 to column 73)",
" (in 'examples/glmr/glmr.stan', line 67, column 2 to column 53)",
" (in 'examples/glmr/glmr.stan', line 68, column 2 to column 73)",
" (in 'examples/glmr/glmr.stan', line 69, column 2 to column 61)",
" (in 'examples/glmr/glmr.stan', line 105, column 2 to column 64)",
" (in 'examples/glmr/glmr.stan', line 73, column 2 to line 79, column 39)",
" (in 'examples/glmr/glmr.stan', line 82, column 2 to column 49)",
" (in 'examples/glmr/glmr.stan', line 84, column 2 to column 49)",
" (in 'examples/glmr/glmr.stan', line 85, column 2 to column 30)",
" (in 'examples/glmr/glmr.stan', line 86, column 2 to column 31)",
" (in 'examples/glmr/glmr.stan', line 87, column 2 to column 35)",
" (in 'examples/glmr/glmr.stan', line 88, column 2 to column 35)",
" (in 'examples/glmr/glmr.stan', line 89, column 2 to column 30)",
" (in 'examples/glmr/glmr.stan', line 90, column 2 to column 35)",
" (in 'examples/glmr/glmr.stan', line 91, column 2 to column 32)",
" (in 'examples/glmr/glmr.stan', line 94, column 2 to column 39)",
" (in 'examples/glmr/glmr.stan', line 95, column 2 to column 40)",
" (in 'examples/glmr/glmr.stan', line 96, column 2 to column 44)",
" (in 'examples/glmr/glmr.stan', line 97, column 2 to column 44)",
" (in 'examples/glmr/glmr.stan', line 98, column 2 to column 39)",
" (in 'examples/glmr/glmr.stan', line 99, column 2 to column 44)",
" (in 'examples/glmr/glmr.stan', line 100, column 2 to column 41)",
" (in 'examples/glmr/glmr.stan', line 2, column 2 to column 17)",
" (in 'examples/glmr/glmr.stan', line 3, column 8 to column 9)",
" (in 'examples/glmr/glmr.stan', line 3, column 2 to column 11)",
" (in 'examples/glmr/glmr.stan', line 5, column 2 to column 19)",
" (in 'examples/glmr/glmr.stan', line 6, column 9 to column 10)",
" (in 'examples/glmr/glmr.stan', line 6, column 12 to column 13)",
" (in 'examples/glmr/glmr.stan', line 6, column 2 to column 17)",
" (in 'examples/glmr/glmr.stan', line 8, column 2 to column 23)",
" (in 'examples/glmr/glmr.stan', line 9, column 2 to column 24)",
" (in 'examples/glmr/glmr.stan', line 10, column 2 to column 28)",
" (in 'examples/glmr/glmr.stan', line 11, column 2 to column 28)",
" (in 'examples/glmr/glmr.stan', line 12, column 2 to column 23)",
" (in 'examples/glmr/glmr.stan', line 13, column 2 to column 28)",
" (in 'examples/glmr/glmr.stan', line 14, column 2 to column 25)",
" (in 'examples/glmr/glmr.stan', line 16, column 21 to column 22)",
" (in 'examples/glmr/glmr.stan', line 16, column 2 to column 24)",
" (in 'examples/glmr/glmr.stan', line 17, column 22 to column 23)",
" (in 'examples/glmr/glmr.stan', line 17, column 2 to column 25)",
" (in 'examples/glmr/glmr.stan', line 18, column 26 to column 27)",
" (in 'examples/glmr/glmr.stan', line 18, column 2 to column 29)",
" (in 'examples/glmr/glmr.stan', line 19, column 26 to column 27)",
" (in 'examples/glmr/glmr.stan', line 19, column 2 to column 29)",
" (in 'examples/glmr/glmr.stan', line 20, column 21 to column 22)",
" (in 'examples/glmr/glmr.stan', line 20, column 2 to column 24)",
" (in 'examples/glmr/glmr.stan', line 21, column 26 to column 27)",
" (in 'examples/glmr/glmr.stan', line 21, column 2 to column 29)",
" (in 'examples/glmr/glmr.stan', line 22, column 23 to column 24)",
" (in 'examples/glmr/glmr.stan', line 22, column 2 to column 26)",
" (in 'examples/glmr/glmr.stan', line 24, column 2 to column 33)",
" (in 'examples/glmr/glmr.stan', line 25, column 2 to column 40)",
" (in 'examples/glmr/glmr.stan', line 26, column 2 to column 32)",
" (in 'examples/glmr/glmr.stan', line 30, column 2 to column 17)",
" (in 'examples/glmr/glmr.stan', line 31, column 9 to column 10)",
" (in 'examples/glmr/glmr.stan', line 31, column 12 to column 14)",
" (in 'examples/glmr/glmr.stan', line 31, column 2 to column 19)",
" (in 'examples/glmr/glmr.stan', line 32, column 9 to column 11)",
" (in 'examples/glmr/glmr.stan', line 32, column 2 to column 21)",
" (in 'examples/glmr/glmr.stan', line 33, column 9 to column 11)",
" (in 'examples/glmr/glmr.stan', line 33, column 2 to column 19)",
" (in 'examples/glmr/glmr.stan', line 35, column 4 to column 34)",
" (in 'examples/glmr/glmr.stan', line 36, column 4 to column 30)",
" (in 'examples/glmr/glmr.stan', line 37, column 4 to column 42)",
" (in 'examples/glmr/glmr.stan', line 34, column 17 to line 38, column 3)",
" (in 'examples/glmr/glmr.stan', line 34, column 2 to line 38, column 3)",
" (in 'examples/glmr/glmr.stan', line 42, column 9 to column 11)",
" (in 'examples/glmr/glmr.stan', line 53, column 9 to column 14)",
" (in 'examples/glmr/glmr.stan', line 54, column 9 to column 15)",
" (in 'examples/glmr/glmr.stan', line 55, column 9 to column 19)",
" (in 'examples/glmr/glmr.stan', line 56, column 9 to column 19)",
" (in 'examples/glmr/glmr.stan', line 57, column 9 to column 14)",
" (in 'examples/glmr/glmr.stan', line 58, column 9 to column 19)",
" (in 'examples/glmr/glmr.stan', line 59, column 9 to column 16)",
" (in 'examples/glmr/glmr.stan', line 63, column 9 to column 14)",
" (in 'examples/glmr/glmr.stan', line 64, column 9 to column 15)",
" (in 'examples/glmr/glmr.stan', line 65, column 9 to column 19)",
" (in 'examples/glmr/glmr.stan', line 66, column 9 to column 19)",
" (in 'examples/glmr/glmr.stan', line 67, column 9 to column 14)",
" (in 'examples/glmr/glmr.stan', line 68, column 9 to column 19)",
" (in 'examples/glmr/glmr.stan', line 69, column 9 to column 16)"};
class glmr_model final : public model_base_crtp<glmr_model> {
private:
int N;
std::vector<int> y;
int K;
Eigen::Matrix<double, -1, -1> X;
int N_age;
int N_educ;
int N_educ_age;
int N_educ_eth;
int N_eth;
int N_male_eth;
int N_state;
std::vector<int> J_age;
std::vector<int> J_educ;
std::vector<int> J_educ_age;
std::vector<int> J_educ_eth;
std::vector<int> J_eth;
std::vector<int> J_male_eth;
std::vector<int> J_state;
double prior_scale_sd;
double prior_scale_Intercept;
double prior_scale_b;
int Kc;
Eigen::Matrix<double, -1, -1> Xc;
Eigen::Matrix<double, -1, 1> means_X;
Eigen::Matrix<double, -1, 1> sds_X;
public:
~glmr_model() final { }
std::string model_name() const final { return "glmr_model"; }
std::vector<std::string> model_compile_info() const {
std::vector<std::string> stanc_info;
stanc_info.push_back("stanc_version = stanc3 51d1957");
stanc_info.push_back("stancflags = ");
return stanc_info;
}
glmr_model(stan::io::var_context& context__,
unsigned int random_seed__ = 0,
std::ostream* pstream__ = nullptr) : model_base_crtp(0) {
using local_scalar_t__ = double ;
boost::ecuyer1988 base_rng__ =
stan::services::util::create_rng(random_seed__, 0);
(void) base_rng__; // suppress unused var warning
static const char* function__ = "glmr_model_namespace::glmr_model";
(void) function__; // suppress unused var warning
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
try {
int pos__;
pos__ = std::numeric_limits<int>::min();
pos__ = 1;
current_statement__ = 42;
context__.validate_dims("data initialization","N","int",
context__.to_vec());
N = std::numeric_limits<int>::min();
current_statement__ = 42;
N = context__.vals_i("N")[(1 - 1)];
current_statement__ = 42;
current_statement__ = 42;
check_greater_or_equal(function__, "N", N, 1);
current_statement__ = 43;
validate_non_negative_index("y", "N", N);
current_statement__ = 44;
context__.validate_dims("data initialization","y","int",
context__.to_vec(N));
y = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 44;
assign(y, nil_index_list(), context__.vals_i("y"),
"assigning variable y");
current_statement__ = 45;
context__.validate_dims("data initialization","K","int",
context__.to_vec());
K = std::numeric_limits<int>::min();
current_statement__ = 45;
K = context__.vals_i("K")[(1 - 1)];
current_statement__ = 45;
current_statement__ = 45;
check_greater_or_equal(function__, "K", K, 1);
current_statement__ = 46;
validate_non_negative_index("X", "N", N);
current_statement__ = 47;
validate_non_negative_index("X", "K", K);
current_statement__ = 48;
context__.validate_dims("data initialization","X","double",
context__.to_vec(N, K));
X = Eigen::Matrix<double, -1, -1>(N, K);
stan::math::fill(X, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> X_flat__;
current_statement__ = 48;
assign(X_flat__, nil_index_list(), context__.vals_r("X"),
"assigning variable X_flat__");
current_statement__ = 48;
pos__ = 1;
current_statement__ = 48;
for (int sym1__ = 1; sym1__ <= K; ++sym1__) {
current_statement__ = 48;
for (int sym2__ = 1; sym2__ <= N; ++sym2__) {
current_statement__ = 48;
assign(X,
cons_list(index_uni(sym2__),
cons_list(index_uni(sym1__), nil_index_list())),
X_flat__[(pos__ - 1)], "assigning variable X");
current_statement__ = 48;
pos__ = (pos__ + 1);}}
}
current_statement__ = 49;
context__.validate_dims("data initialization","N_age","int",
context__.to_vec());
N_age = std::numeric_limits<int>::min();
current_statement__ = 49;
N_age = context__.vals_i("N_age")[(1 - 1)];
current_statement__ = 49;
current_statement__ = 49;
check_greater_or_equal(function__, "N_age", N_age, 1);
current_statement__ = 50;
context__.validate_dims("data initialization","N_educ","int",
context__.to_vec());
N_educ = std::numeric_limits<int>::min();
current_statement__ = 50;
N_educ = context__.vals_i("N_educ")[(1 - 1)];
current_statement__ = 50;
current_statement__ = 50;
check_greater_or_equal(function__, "N_educ", N_educ, 1);
current_statement__ = 51;
context__.validate_dims("data initialization","N_educ_age","int",
context__.to_vec());
N_educ_age = std::numeric_limits<int>::min();
current_statement__ = 51;
N_educ_age = context__.vals_i("N_educ_age")[(1 - 1)];
current_statement__ = 51;
current_statement__ = 51;
check_greater_or_equal(function__, "N_educ_age", N_educ_age, 1);
current_statement__ = 52;
context__.validate_dims("data initialization","N_educ_eth","int",
context__.to_vec());
N_educ_eth = std::numeric_limits<int>::min();
current_statement__ = 52;
N_educ_eth = context__.vals_i("N_educ_eth")[(1 - 1)];
current_statement__ = 52;
current_statement__ = 52;
check_greater_or_equal(function__, "N_educ_eth", N_educ_eth, 1);
current_statement__ = 53;
context__.validate_dims("data initialization","N_eth","int",
context__.to_vec());
N_eth = std::numeric_limits<int>::min();
current_statement__ = 53;
N_eth = context__.vals_i("N_eth")[(1 - 1)];
current_statement__ = 53;
current_statement__ = 53;
check_greater_or_equal(function__, "N_eth", N_eth, 1);
current_statement__ = 54;
context__.validate_dims("data initialization","N_male_eth","int",
context__.to_vec());
N_male_eth = std::numeric_limits<int>::min();
current_statement__ = 54;
N_male_eth = context__.vals_i("N_male_eth")[(1 - 1)];
current_statement__ = 54;
current_statement__ = 54;
check_greater_or_equal(function__, "N_male_eth", N_male_eth, 1);
current_statement__ = 55;
context__.validate_dims("data initialization","N_state","int",
context__.to_vec());
N_state = std::numeric_limits<int>::min();
current_statement__ = 55;
N_state = context__.vals_i("N_state")[(1 - 1)];
current_statement__ = 55;
current_statement__ = 55;
check_greater_or_equal(function__, "N_state", N_state, 1);
current_statement__ = 56;
validate_non_negative_index("J_age", "N", N);
current_statement__ = 57;
context__.validate_dims("data initialization","J_age","int",
context__.to_vec(N));
J_age = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 57;
assign(J_age, nil_index_list(), context__.vals_i("J_age"),
"assigning variable J_age");
current_statement__ = 57;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 57;
current_statement__ = 57;
check_greater_or_equal(function__, "J_age[sym1__]",
J_age[(sym1__ - 1)], 1);}
current_statement__ = 58;
validate_non_negative_index("J_educ", "N", N);
current_statement__ = 59;
context__.validate_dims("data initialization","J_educ","int",
context__.to_vec(N));
J_educ = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 59;
assign(J_educ, nil_index_list(), context__.vals_i("J_educ"),
"assigning variable J_educ");
current_statement__ = 59;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 59;
current_statement__ = 59;
check_greater_or_equal(function__, "J_educ[sym1__]",
J_educ[(sym1__ - 1)], 1);}
current_statement__ = 60;
validate_non_negative_index("J_educ_age", "N", N);
current_statement__ = 61;
context__.validate_dims("data initialization","J_educ_age","int",
context__.to_vec(N));
J_educ_age = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 61;
assign(J_educ_age, nil_index_list(), context__.vals_i("J_educ_age"),
"assigning variable J_educ_age");
current_statement__ = 61;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 61;
current_statement__ = 61;
check_greater_or_equal(function__, "J_educ_age[sym1__]",
J_educ_age[(sym1__ - 1)], 1);}
current_statement__ = 62;
validate_non_negative_index("J_educ_eth", "N", N);
current_statement__ = 63;
context__.validate_dims("data initialization","J_educ_eth","int",
context__.to_vec(N));
J_educ_eth = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 63;
assign(J_educ_eth, nil_index_list(), context__.vals_i("J_educ_eth"),
"assigning variable J_educ_eth");
current_statement__ = 63;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 63;
current_statement__ = 63;
check_greater_or_equal(function__, "J_educ_eth[sym1__]",
J_educ_eth[(sym1__ - 1)], 1);}
current_statement__ = 64;
validate_non_negative_index("J_eth", "N", N);
current_statement__ = 65;
context__.validate_dims("data initialization","J_eth","int",
context__.to_vec(N));
J_eth = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 65;
assign(J_eth, nil_index_list(), context__.vals_i("J_eth"),
"assigning variable J_eth");
current_statement__ = 65;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 65;
current_statement__ = 65;
check_greater_or_equal(function__, "J_eth[sym1__]",
J_eth[(sym1__ - 1)], 1);}
current_statement__ = 66;
validate_non_negative_index("J_male_eth", "N", N);
current_statement__ = 67;
context__.validate_dims("data initialization","J_male_eth","int",
context__.to_vec(N));
J_male_eth = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 67;
assign(J_male_eth, nil_index_list(), context__.vals_i("J_male_eth"),
"assigning variable J_male_eth");
current_statement__ = 67;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 67;
current_statement__ = 67;
check_greater_or_equal(function__, "J_male_eth[sym1__]",
J_male_eth[(sym1__ - 1)], 1);}
current_statement__ = 68;
validate_non_negative_index("J_state", "N", N);
current_statement__ = 69;
context__.validate_dims("data initialization","J_state","int",
context__.to_vec(N));
J_state = std::vector<int>(N, std::numeric_limits<int>::min());
current_statement__ = 69;
assign(J_state, nil_index_list(), context__.vals_i("J_state"),
"assigning variable J_state");
current_statement__ = 69;
for (int sym1__ = 1; sym1__ <= N; ++sym1__) {
current_statement__ = 69;
current_statement__ = 69;
check_greater_or_equal(function__, "J_state[sym1__]",
J_state[(sym1__ - 1)], 1);}
current_statement__ = 70;
context__.validate_dims("data initialization","prior_scale_sd",
"double",context__.to_vec());
prior_scale_sd = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 70;
prior_scale_sd = context__.vals_r("prior_scale_sd")[(1 - 1)];
current_statement__ = 70;
current_statement__ = 70;
check_greater_or_equal(function__, "prior_scale_sd", prior_scale_sd,
0.0);
current_statement__ = 71;
context__.validate_dims("data initialization","prior_scale_Intercept",
"double",context__.to_vec());
prior_scale_Intercept = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 71;
prior_scale_Intercept = context__.vals_r("prior_scale_Intercept")[
(1 - 1)];
current_statement__ = 71;
current_statement__ = 71;
check_greater_or_equal(function__, "prior_scale_Intercept",
prior_scale_Intercept, 0.0);
current_statement__ = 72;
context__.validate_dims("data initialization","prior_scale_b","double",
context__.to_vec());
prior_scale_b = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 72;
prior_scale_b = context__.vals_r("prior_scale_b")[(1 - 1)];
current_statement__ = 72;
current_statement__ = 72;
check_greater_or_equal(function__, "prior_scale_b", prior_scale_b, 0.0);
current_statement__ = 73;
Kc = std::numeric_limits<int>::min();
current_statement__ = 73;
Kc = (K - 1);
current_statement__ = 74;
validate_non_negative_index("Xc", "N", N);
current_statement__ = 75;
validate_non_negative_index("Xc", "Kc", Kc);
current_statement__ = 76;
Xc = Eigen::Matrix<double, -1, -1>(N, Kc);
stan::math::fill(Xc, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 77;
validate_non_negative_index("means_X", "Kc", Kc);
current_statement__ = 78;
means_X = Eigen::Matrix<double, -1, 1>(Kc);
stan::math::fill(means_X, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 79;
validate_non_negative_index("sds_X", "Kc", Kc);
current_statement__ = 80;
sds_X = Eigen::Matrix<double, -1, 1>(Kc);
stan::math::fill(sds_X, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 85;
for (int i = 2; i <= K; ++i) {
current_statement__ = 81;
assign(means_X, cons_list(index_uni((i - 1)), nil_index_list()),
mean(
rvalue(X,
cons_list(index_omni(),
cons_list(index_uni(i), nil_index_list())), "X")),
"assigning variable means_X");
current_statement__ = 82;
assign(sds_X, cons_list(index_uni((i - 1)), nil_index_list()),
sd(
rvalue(X,
cons_list(index_omni(),
cons_list(index_uni(i), nil_index_list())), "X")),
"assigning variable sds_X");
current_statement__ = 83;
assign(Xc,
cons_list(index_omni(),
cons_list(index_uni((i - 1)), nil_index_list())),
subtract(
rvalue(X,
cons_list(index_omni(),
cons_list(index_uni(i), nil_index_list())), "X"),
means_X[((i - 1) - 1)]), "assigning variable Xc");}
current_statement__ = 86;
validate_non_negative_index("b_varmat", "Kc", Kc);
current_statement__ = 87;
validate_non_negative_index("z_age_varmat", "N_age", N_age);
current_statement__ = 88;
validate_non_negative_index("z_educ_varmat", "N_educ", N_educ);
current_statement__ = 89;
validate_non_negative_index("z_educ_age_varmat", "N_educ_age",
N_educ_age);
current_statement__ = 90;
validate_non_negative_index("z_educ_eth_varmat", "N_educ_eth",
N_educ_eth);
current_statement__ = 91;
validate_non_negative_index("z_eth_varmat", "N_eth", N_eth);
current_statement__ = 92;
validate_non_negative_index("z_male_eth_varmat", "N_male_eth",
N_male_eth);
current_statement__ = 93;
validate_non_negative_index("z_state_varmat", "N_state", N_state);
current_statement__ = 94;
validate_non_negative_index("r_age_varmat", "N_age", N_age);
current_statement__ = 95;
validate_non_negative_index("r_educ_varmat", "N_educ", N_educ);
current_statement__ = 96;
validate_non_negative_index("r_educ_age_varmat", "N_educ_age",
N_educ_age);
current_statement__ = 97;
validate_non_negative_index("r_educ_eth_varmat", "N_educ_eth",
N_educ_eth);
current_statement__ = 98;
validate_non_negative_index("r_eth_varmat", "N_eth", N_eth);
current_statement__ = 99;
validate_non_negative_index("r_male_eth_varmat", "N_male_eth",
N_male_eth);
current_statement__ = 100;
validate_non_negative_index("r_state_varmat", "N_state", N_state);
} catch (const std::exception& e) {
stan::lang::rethrow_located(e, locations_array__[current_statement__]);
// Next line prevents compiler griping about no return
throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
}
num_params_r__ = 0U;
try {
num_params_r__ += Kc;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += 1;
num_params_r__ += N_age;
num_params_r__ += N_educ;
num_params_r__ += N_educ_age;
num_params_r__ += N_educ_eth;
num_params_r__ += N_eth;
num_params_r__ += N_male_eth;
num_params_r__ += N_state;
} catch (const std::exception& e) {
stan::lang::rethrow_located(e, locations_array__[current_statement__]);
// Next line prevents compiler griping about no return
throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
}
}
template <bool propto__, bool jacobian__, typename T__>
inline T__ log_prob(std::vector<T__>& params_r__,
std::vector<int>& params_i__,
std::ostream* pstream__ = nullptr) const {
using var_value_matrix = std::conditional_t<stan::is_var<T__>::value, stan::math::var_value<Eigen::MatrixXd>, Eigen::MatrixXd>;
using local_scalar_t__ = T__;
T__ lp__(0.0);
stan::math::accumulator<T__> lp_accum__;
static const char* function__ = "glmr_model_namespace::log_prob";
(void) function__; // suppress unused var warning
stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
try {
var_value_vector<local_scalar_t__> b_varmat;
b_varmat = Eigen::Matrix<double, -1, 1>(Kc);
stan::math::initialize_fill(b_varmat, DUMMY_VAR__);
current_statement__ = 1;
b_varmat = in__.var_vector(Kc);
local_scalar_t__ Intercept;
Intercept = DUMMY_VAR__;
current_statement__ = 2;
Intercept = in__.scalar();
local_scalar_t__ sd_age;
sd_age = DUMMY_VAR__;
current_statement__ = 3;
sd_age = in__.scalar();
current_statement__ = 3;
if (jacobian__) {
current_statement__ = 3;
sd_age = stan::math::lb_constrain(sd_age, 0, lp__);
} else {
current_statement__ = 3;
sd_age = stan::math::lb_constrain(sd_age, 0);
}
local_scalar_t__ sd_educ;
sd_educ = DUMMY_VAR__;
current_statement__ = 4;
sd_educ = in__.scalar();
current_statement__ = 4;
if (jacobian__) {
current_statement__ = 4;
sd_educ = stan::math::lb_constrain(sd_educ, 0, lp__);
} else {
current_statement__ = 4;
sd_educ = stan::math::lb_constrain(sd_educ, 0);
}
local_scalar_t__ sd_educ_age;
sd_educ_age = DUMMY_VAR__;
current_statement__ = 5;
sd_educ_age = in__.scalar();
current_statement__ = 5;
if (jacobian__) {
current_statement__ = 5;
sd_educ_age = stan::math::lb_constrain(sd_educ_age, 0, lp__);
} else {
current_statement__ = 5;
sd_educ_age = stan::math::lb_constrain(sd_educ_age, 0);
}
local_scalar_t__ sd_educ_eth;
sd_educ_eth = DUMMY_VAR__;
current_statement__ = 6;
sd_educ_eth = in__.scalar();
current_statement__ = 6;
if (jacobian__) {
current_statement__ = 6;
sd_educ_eth = stan::math::lb_constrain(sd_educ_eth, 0, lp__);
} else {
current_statement__ = 6;
sd_educ_eth = stan::math::lb_constrain(sd_educ_eth, 0);
}
local_scalar_t__ sd_eth;
sd_eth = DUMMY_VAR__;
current_statement__ = 7;
sd_eth = in__.scalar();
current_statement__ = 7;
if (jacobian__) {
current_statement__ = 7;
sd_eth = stan::math::lb_constrain(sd_eth, 0, lp__);
} else {
current_statement__ = 7;
sd_eth = stan::math::lb_constrain(sd_eth, 0);
}
local_scalar_t__ sd_male_eth;
sd_male_eth = DUMMY_VAR__;
current_statement__ = 8;
sd_male_eth = in__.scalar();
current_statement__ = 8;
if (jacobian__) {
current_statement__ = 8;
sd_male_eth = stan::math::lb_constrain(sd_male_eth, 0, lp__);
} else {
current_statement__ = 8;
sd_male_eth = stan::math::lb_constrain(sd_male_eth, 0);
}
local_scalar_t__ sd_state;
sd_state = DUMMY_VAR__;
current_statement__ = 9;
sd_state = in__.scalar();
current_statement__ = 9;
if (jacobian__) {
current_statement__ = 9;
sd_state = stan::math::lb_constrain(sd_state, 0, lp__);
} else {
current_statement__ = 9;
sd_state = stan::math::lb_constrain(sd_state, 0);
}
var_value_vector<local_scalar_t__> z_age_varmat;
z_age_varmat = Eigen::Matrix<double, -1, 1>(N_age);
stan::math::initialize_fill(z_age_varmat, DUMMY_VAR__);
current_statement__ = 10;
z_age_varmat = in__.var_vector(N_age);
var_value_vector<local_scalar_t__> z_educ_varmat;
z_educ_varmat = Eigen::Matrix<double, -1, 1>(N_educ);
stan::math::initialize_fill(z_educ_varmat, DUMMY_VAR__);
current_statement__ = 11;
z_educ_varmat = in__.var_vector(N_educ);
var_value_vector<local_scalar_t__> z_educ_age_varmat;
z_educ_age_varmat = Eigen::Matrix<double, -1, 1>(N_educ_age);
stan::math::initialize_fill(z_educ_age_varmat, DUMMY_VAR__);
current_statement__ = 12;
z_educ_age_varmat = in__.var_vector(N_educ_age);
var_value_vector<local_scalar_t__> z_educ_eth_varmat;
z_educ_eth_varmat = Eigen::Matrix<double, -1, 1>(N_educ_eth);
stan::math::initialize_fill(z_educ_eth_varmat, DUMMY_VAR__);
current_statement__ = 13;
z_educ_eth_varmat = in__.var_vector(N_educ_eth);
var_value_vector<local_scalar_t__> z_eth_varmat;
z_eth_varmat = Eigen::Matrix<double, -1, 1>(N_eth);
stan::math::initialize_fill(z_eth_varmat, DUMMY_VAR__);
current_statement__ = 14;
z_eth_varmat = in__.var_vector(N_eth);
var_value_vector<local_scalar_t__> z_male_eth_varmat;
z_male_eth_varmat = Eigen::Matrix<double, -1, 1>(N_male_eth);
stan::math::initialize_fill(z_male_eth_varmat, DUMMY_VAR__);
current_statement__ = 15;
z_male_eth_varmat = in__.var_vector(N_male_eth);
var_value_vector<local_scalar_t__> z_state_varmat;
z_state_varmat = Eigen::Matrix<double, -1, 1>(N_state);
stan::math::initialize_fill(z_state_varmat, DUMMY_VAR__);
current_statement__ = 16;
z_state_varmat = in__.var_vector(N_state);
var_value_vector<local_scalar_t__> r_age_varmat;
r_age_varmat = Eigen::Matrix<double, -1, 1>(N_age);
stan::math::initialize_fill(r_age_varmat, DUMMY_VAR__);
current_statement__ = 17;
assign(r_age_varmat, nil_index_list(), multiply(sd_age, z_age_varmat),
"assigning variable r_age_varmat");
var_value_vector<local_scalar_t__> r_educ_varmat;
r_educ_varmat = Eigen::Matrix<double, -1, 1>(N_educ);
stan::math::initialize_fill(r_educ_varmat, DUMMY_VAR__);
current_statement__ = 18;
assign(r_educ_varmat, nil_index_list(),
multiply(sd_educ, z_educ_varmat), "assigning variable r_educ_varmat");
var_value_vector<local_scalar_t__> r_educ_age_varmat;
r_educ_age_varmat = Eigen::Matrix<double, -1, 1>(N_educ_age);
stan::math::initialize_fill(r_educ_age_varmat, DUMMY_VAR__);
current_statement__ = 19;
assign(r_educ_age_varmat, nil_index_list(),
multiply(sd_educ_age, z_educ_age_varmat),
"assigning variable r_educ_age_varmat");
var_value_vector<local_scalar_t__> r_educ_eth_varmat;
r_educ_eth_varmat = Eigen::Matrix<double, -1, 1>(N_educ_eth);
stan::math::initialize_fill(r_educ_eth_varmat, DUMMY_VAR__);
current_statement__ = 20;
assign(r_educ_eth_varmat, nil_index_list(),
multiply(sd_educ_eth, z_educ_eth_varmat),
"assigning variable r_educ_eth_varmat");
var_value_vector<local_scalar_t__> r_eth_varmat;
r_eth_varmat = Eigen::Matrix<double, -1, 1>(N_eth);
stan::math::initialize_fill(r_eth_varmat, DUMMY_VAR__);
current_statement__ = 21;
assign(r_eth_varmat, nil_index_list(), multiply(sd_eth, z_eth_varmat),
"assigning variable r_eth_varmat");
var_value_vector<local_scalar_t__> r_male_eth_varmat;
r_male_eth_varmat = Eigen::Matrix<double, -1, 1>(N_male_eth);
stan::math::initialize_fill(r_male_eth_varmat, DUMMY_VAR__);
current_statement__ = 22;
assign(r_male_eth_varmat, nil_index_list(),
multiply(sd_male_eth, z_male_eth_varmat),
"assigning variable r_male_eth_varmat");
var_value_vector<local_scalar_t__> r_state_varmat;
r_state_varmat = Eigen::Matrix<double, -1, 1>(N_state);
stan::math::initialize_fill(r_state_varmat, DUMMY_VAR__);
current_statement__ = 23;
assign(r_state_varmat, nil_index_list(),
multiply(sd_state, z_state_varmat),
"assigning variable r_state_varmat");
{
current_statement__ = 25;
lp_accum__.add(
bernoulli_logit_glm_lpmf<propto__>(y, Xc,
add(
add(
add(
add(
add(
add(
add(Intercept,
rvalue(r_age_varmat,
cons_list(index_multi(J_age), nil_index_list()),
"r_age_varmat")),
rvalue(r_educ_varmat,
cons_list(index_multi(J_educ), nil_index_list()),
"r_educ_varmat")),
rvalue(r_educ_age_varmat,
cons_list(index_multi(J_educ_age), nil_index_list()),
"r_educ_age_varmat")),
rvalue(r_educ_eth_varmat,
cons_list(index_multi(J_educ_eth), nil_index_list()),
"r_educ_eth_varmat")),
rvalue(r_eth_varmat,
cons_list(index_multi(J_eth), nil_index_list()),
"r_eth_varmat")),
rvalue(r_male_eth_varmat,
cons_list(index_multi(J_male_eth), nil_index_list()),
"r_male_eth_varmat")),
rvalue(r_state_varmat,
cons_list(index_multi(J_state), nil_index_list()),
"r_state_varmat")), b_varmat));
current_statement__ = 26;
lp_accum__.add(
normal_lpdf<propto__>(b_varmat, 0.0,
elt_divide(prior_scale_b, sds_X)));
current_statement__ = 27;
lp_accum__.add(
normal_lpdf<propto__>(Intercept, 0.0, prior_scale_Intercept));
current_statement__ = 28;
lp_accum__.add(std_normal_lpdf<propto__>(z_age_varmat));
current_statement__ = 29;
lp_accum__.add(std_normal_lpdf<propto__>(z_educ_varmat));
current_statement__ = 30;
lp_accum__.add(std_normal_lpdf<propto__>(z_educ_age_varmat));
current_statement__ = 31;
lp_accum__.add(std_normal_lpdf<propto__>(z_educ_eth_varmat));
current_statement__ = 32;
lp_accum__.add(std_normal_lpdf<propto__>(z_eth_varmat));
current_statement__ = 33;
lp_accum__.add(std_normal_lpdf<propto__>(z_male_eth_varmat));
current_statement__ = 34;
lp_accum__.add(std_normal_lpdf<propto__>(z_state_varmat));
current_statement__ = 35;
lp_accum__.add(exponential_lpdf<propto__>(sd_age, prior_scale_sd));
current_statement__ = 36;
lp_accum__.add(exponential_lpdf<propto__>(sd_educ, prior_scale_sd));
current_statement__ = 37;
lp_accum__.add(
exponential_lpdf<propto__>(sd_educ_age, prior_scale_sd));
current_statement__ = 38;
lp_accum__.add(
exponential_lpdf<propto__>(sd_educ_eth, prior_scale_sd));
current_statement__ = 39;
lp_accum__.add(exponential_lpdf<propto__>(sd_eth, prior_scale_sd));
current_statement__ = 40;
lp_accum__.add(
exponential_lpdf<propto__>(sd_male_eth, prior_scale_sd));
current_statement__ = 41;
lp_accum__.add(exponential_lpdf<propto__>(sd_state, prior_scale_sd));
}
} catch (const std::exception& e) {
stan::lang::rethrow_located(e, locations_array__[current_statement__]);
// 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 <typename RNG>
inline void write_array(RNG& base_rng__, std::vector<double>& params_r__,
std::vector<int>& params_i__,
std::vector<double>& vars__,
bool emit_transformed_parameters__ = true,
bool emit_generated_quantities__ = true,
std::ostream* pstream__ = nullptr) const {
using local_scalar_t__ = double;
vars__.resize(0);
stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
static const char* function__ = "glmr_model_namespace::write_array";
(void) function__; // suppress unused var warning
(void) function__; // suppress unused var warning
double lp__ = 0.0;
(void) lp__; // dummy to suppress unused var warning
stan::math::accumulator<double> lp_accum__;
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
try {
var_value_vector<double> b_varmat;
b_varmat = Eigen::Matrix<double, -1, 1>(Kc);
stan::math::initialize_fill(b_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 1;
b_varmat = in__.var_vector(Kc);
double Intercept;
Intercept = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 2;
Intercept = in__.scalar();
double sd_age;
sd_age = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 3;
sd_age = in__.scalar();
current_statement__ = 3;
sd_age = stan::math::lb_constrain(sd_age, 0);
double sd_educ;
sd_educ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 4;
sd_educ = in__.scalar();
current_statement__ = 4;
sd_educ = stan::math::lb_constrain(sd_educ, 0);
double sd_educ_age;
sd_educ_age = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 5;
sd_educ_age = in__.scalar();
current_statement__ = 5;
sd_educ_age = stan::math::lb_constrain(sd_educ_age, 0);
double sd_educ_eth;
sd_educ_eth = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 6;
sd_educ_eth = in__.scalar();
current_statement__ = 6;
sd_educ_eth = stan::math::lb_constrain(sd_educ_eth, 0);
double sd_eth;
sd_eth = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 7;
sd_eth = in__.scalar();
current_statement__ = 7;
sd_eth = stan::math::lb_constrain(sd_eth, 0);
double sd_male_eth;
sd_male_eth = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 8;
sd_male_eth = in__.scalar();
current_statement__ = 8;
sd_male_eth = stan::math::lb_constrain(sd_male_eth, 0);
double sd_state;
sd_state = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 9;
sd_state = in__.scalar();
current_statement__ = 9;
sd_state = stan::math::lb_constrain(sd_state, 0);
var_value_vector<double> z_age_varmat;
z_age_varmat = Eigen::Matrix<double, -1, 1>(N_age);
stan::math::initialize_fill(z_age_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 10;
z_age_varmat = in__.var_vector(N_age);
var_value_vector<double> z_educ_varmat;
z_educ_varmat = Eigen::Matrix<double, -1, 1>(N_educ);
stan::math::initialize_fill(z_educ_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 11;
z_educ_varmat = in__.var_vector(N_educ);
var_value_vector<double> z_educ_age_varmat;
z_educ_age_varmat = Eigen::Matrix<double, -1, 1>(N_educ_age);
stan::math::initialize_fill(z_educ_age_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 12;
z_educ_age_varmat = in__.var_vector(N_educ_age);
var_value_vector<double> z_educ_eth_varmat;
z_educ_eth_varmat = Eigen::Matrix<double, -1, 1>(N_educ_eth);
stan::math::initialize_fill(z_educ_eth_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 13;
z_educ_eth_varmat = in__.var_vector(N_educ_eth);
var_value_vector<double> z_eth_varmat;
z_eth_varmat = Eigen::Matrix<double, -1, 1>(N_eth);
stan::math::initialize_fill(z_eth_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 14;
z_eth_varmat = in__.var_vector(N_eth);
var_value_vector<double> z_male_eth_varmat;
z_male_eth_varmat = Eigen::Matrix<double, -1, 1>(N_male_eth);
stan::math::initialize_fill(z_male_eth_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 15;
z_male_eth_varmat = in__.var_vector(N_male_eth);
var_value_vector<double> z_state_varmat;
z_state_varmat = Eigen::Matrix<double, -1, 1>(N_state);
stan::math::initialize_fill(z_state_varmat, std::numeric_limits<double>::quiet_NaN());
current_statement__ = 16;
z_state_varmat = in__.var_vector(N_state);
var_value_vector<double> r_age_varmat;
r_age_varmat = Eigen::Matrix<double, -1, 1>(N_age);
stan::math::initialize_fill(r_age_varmat, std::numeric_limits<double>::quiet_NaN());
var_value_vector<double> r_educ_varmat;
r_educ_varmat = Eigen::Matrix<double, -1, 1>(N_educ);
stan::math::initialize_fill(r_educ_varmat, std::numeric_limits<double>::quiet_NaN());
var_value_vector<double> r_educ_age_varmat;
r_educ_age_varmat = Eigen::Matrix<double, -1, 1>(N_educ_age);
stan::math::initialize_fill(r_educ_age_varmat, std::numeric_limits<double>::quiet_NaN());
var_value_vector<double> r_educ_eth_varmat;
r_educ_eth_varmat = Eigen::Matrix<double, -1, 1>(N_educ_eth);
stan::math::initialize_fill(r_educ_eth_varmat, std::numeric_limits<double>::quiet_NaN());
var_value_vector<double> r_eth_varmat;
r_eth_varmat = Eigen::Matrix<double, -1, 1>(N_eth);
stan::math::initialize_fill(r_eth_varmat, std::numeric_limits<double>::quiet_NaN());
var_value_vector<double> r_male_eth_varmat;
r_male_eth_varmat = Eigen::Matrix<double, -1, 1>(N_male_eth);
stan::math::initialize_fill(r_male_eth_varmat, std::numeric_limits<double>::quiet_NaN());
var_value_vector<double> r_state_varmat;
r_state_varmat = Eigen::Matrix<double, -1, 1>(N_state);
stan::math::initialize_fill(r_state_varmat, std::numeric_limits<double>::quiet_NaN());
for (int sym1__ = 1; sym1__ <= Kc; ++sym1__) {
vars__.emplace_back(b_varmat[(sym1__ - 1)]);}
vars__.emplace_back(Intercept);
vars__.emplace_back(sd_age);
vars__.emplace_back(sd_educ);
vars__.emplace_back(sd_educ_age);
vars__.emplace_back(sd_educ_eth);
vars__.emplace_back(sd_eth);
vars__.emplace_back(sd_male_eth);
vars__.emplace_back(sd_state);
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
vars__.emplace_back(z_age_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
vars__.emplace_back(z_educ_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
vars__.emplace_back(z_educ_age_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
vars__.emplace_back(z_educ_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
vars__.emplace_back(z_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
vars__.emplace_back(z_male_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
vars__.emplace_back(z_state_varmat[(sym1__ - 1)]);}
if (logical_negation((primitive_value(emit_transformed_parameters__) ||
primitive_value(emit_generated_quantities__)))) {
return ;
}
current_statement__ = 17;
assign(r_age_varmat, nil_index_list(), multiply(sd_age, z_age_varmat),
"assigning variable r_age_varmat");
current_statement__ = 18;
assign(r_educ_varmat, nil_index_list(),
multiply(sd_educ, z_educ_varmat), "assigning variable r_educ_varmat");
current_statement__ = 19;
assign(r_educ_age_varmat, nil_index_list(),
multiply(sd_educ_age, z_educ_age_varmat),
"assigning variable r_educ_age_varmat");
current_statement__ = 20;
assign(r_educ_eth_varmat, nil_index_list(),
multiply(sd_educ_eth, z_educ_eth_varmat),
"assigning variable r_educ_eth_varmat");
current_statement__ = 21;
assign(r_eth_varmat, nil_index_list(), multiply(sd_eth, z_eth_varmat),
"assigning variable r_eth_varmat");
current_statement__ = 22;
assign(r_male_eth_varmat, nil_index_list(),
multiply(sd_male_eth, z_male_eth_varmat),
"assigning variable r_male_eth_varmat");
current_statement__ = 23;
assign(r_state_varmat, nil_index_list(),
multiply(sd_state, z_state_varmat),
"assigning variable r_state_varmat");
if (emit_transformed_parameters__) {
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
vars__.emplace_back(r_age_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
vars__.emplace_back(r_educ_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
vars__.emplace_back(r_educ_age_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
vars__.emplace_back(r_educ_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
vars__.emplace_back(r_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
vars__.emplace_back(r_male_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
vars__.emplace_back(r_state_varmat[(sym1__ - 1)]);}
}
if (logical_negation(emit_generated_quantities__)) {
return ;
}
double b_Intercept;
b_Intercept = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 24;
b_Intercept = (Intercept - dot_product(means_X, b_varmat));
vars__.emplace_back(b_Intercept);
} catch (const std::exception& e) {
stan::lang::rethrow_located(e, locations_array__[current_statement__]);
// Next line prevents compiler griping about no return
throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
}
} // write_array()
inline void transform_inits(const stan::io::var_context& context__,
std::vector<int>& params_i__,
std::vector<double>& vars__,
std::ostream* pstream__) const
final {
using local_scalar_t__ = double;
vars__.clear();
vars__.reserve(num_params_r__);
try {
int pos__;
pos__ = std::numeric_limits<int>::min();
pos__ = 1;
var_value_vector<double> b_varmat;
b_varmat = Eigen::Matrix<double, -1, 1>(Kc);
stan::math::initialize_fill(b_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> b_varmat_flat__;
current_statement__ = 1;
assign(b_varmat_flat__, nil_index_list(),
context__.vals_r("b_varmat"), "assigning variable b_varmat_flat__");
current_statement__ = 1;
pos__ = 1;
current_statement__ = 1;
for (int sym1__ = 1; sym1__ <= Kc; ++sym1__) {
current_statement__ = 1;
assign(b_varmat, cons_list(index_uni(sym1__), nil_index_list()),
b_varmat_flat__[(pos__ - 1)], "assigning variable b_varmat");
current_statement__ = 1;
pos__ = (pos__ + 1);}
}
double Intercept;
Intercept = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 2;
Intercept = context__.vals_r("Intercept")[(1 - 1)];
double sd_age;
sd_age = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 3;
sd_age = context__.vals_r("sd_age")[(1 - 1)];
double sd_age_free__;
sd_age_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 3;
sd_age_free__ = stan::math::lb_free(sd_age, 0);
double sd_educ;
sd_educ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 4;
sd_educ = context__.vals_r("sd_educ")[(1 - 1)];
double sd_educ_free__;
sd_educ_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 4;
sd_educ_free__ = stan::math::lb_free(sd_educ, 0);
double sd_educ_age;
sd_educ_age = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 5;
sd_educ_age = context__.vals_r("sd_educ_age")[(1 - 1)];
double sd_educ_age_free__;
sd_educ_age_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 5;
sd_educ_age_free__ = stan::math::lb_free(sd_educ_age, 0);
double sd_educ_eth;
sd_educ_eth = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 6;
sd_educ_eth = context__.vals_r("sd_educ_eth")[(1 - 1)];
double sd_educ_eth_free__;
sd_educ_eth_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 6;
sd_educ_eth_free__ = stan::math::lb_free(sd_educ_eth, 0);
double sd_eth;
sd_eth = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 7;
sd_eth = context__.vals_r("sd_eth")[(1 - 1)];
double sd_eth_free__;
sd_eth_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 7;
sd_eth_free__ = stan::math::lb_free(sd_eth, 0);
double sd_male_eth;
sd_male_eth = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 8;
sd_male_eth = context__.vals_r("sd_male_eth")[(1 - 1)];
double sd_male_eth_free__;
sd_male_eth_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 8;
sd_male_eth_free__ = stan::math::lb_free(sd_male_eth, 0);
double sd_state;
sd_state = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 9;
sd_state = context__.vals_r("sd_state")[(1 - 1)];
double sd_state_free__;
sd_state_free__ = std::numeric_limits<double>::quiet_NaN();
current_statement__ = 9;
sd_state_free__ = stan::math::lb_free(sd_state, 0);
var_value_vector<double> z_age_varmat;
z_age_varmat = Eigen::Matrix<double, -1, 1>(N_age);
stan::math::initialize_fill(z_age_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_age_varmat_flat__;
current_statement__ = 10;
assign(z_age_varmat_flat__, nil_index_list(),
context__.vals_r("z_age_varmat"),
"assigning variable z_age_varmat_flat__");
current_statement__ = 10;
pos__ = 1;
current_statement__ = 10;
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
current_statement__ = 10;
assign(z_age_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_age_varmat_flat__[(pos__ - 1)],
"assigning variable z_age_varmat");
current_statement__ = 10;
pos__ = (pos__ + 1);}
}
var_value_vector<double> z_educ_varmat;
z_educ_varmat = Eigen::Matrix<double, -1, 1>(N_educ);
stan::math::initialize_fill(z_educ_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_educ_varmat_flat__;
current_statement__ = 11;
assign(z_educ_varmat_flat__, nil_index_list(),
context__.vals_r("z_educ_varmat"),
"assigning variable z_educ_varmat_flat__");
current_statement__ = 11;
pos__ = 1;
current_statement__ = 11;
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
current_statement__ = 11;
assign(z_educ_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_educ_varmat_flat__[(pos__ - 1)],
"assigning variable z_educ_varmat");
current_statement__ = 11;
pos__ = (pos__ + 1);}
}
var_value_vector<double> z_educ_age_varmat;
z_educ_age_varmat = Eigen::Matrix<double, -1, 1>(N_educ_age);
stan::math::initialize_fill(z_educ_age_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_educ_age_varmat_flat__;
current_statement__ = 12;
assign(z_educ_age_varmat_flat__, nil_index_list(),
context__.vals_r("z_educ_age_varmat"),
"assigning variable z_educ_age_varmat_flat__");
current_statement__ = 12;
pos__ = 1;
current_statement__ = 12;
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
current_statement__ = 12;
assign(z_educ_age_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_educ_age_varmat_flat__[(pos__ - 1)],
"assigning variable z_educ_age_varmat");
current_statement__ = 12;
pos__ = (pos__ + 1);}
}
var_value_vector<double> z_educ_eth_varmat;
z_educ_eth_varmat = Eigen::Matrix<double, -1, 1>(N_educ_eth);
stan::math::initialize_fill(z_educ_eth_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_educ_eth_varmat_flat__;
current_statement__ = 13;
assign(z_educ_eth_varmat_flat__, nil_index_list(),
context__.vals_r("z_educ_eth_varmat"),
"assigning variable z_educ_eth_varmat_flat__");
current_statement__ = 13;
pos__ = 1;
current_statement__ = 13;
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
current_statement__ = 13;
assign(z_educ_eth_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_educ_eth_varmat_flat__[(pos__ - 1)],
"assigning variable z_educ_eth_varmat");
current_statement__ = 13;
pos__ = (pos__ + 1);}
}
var_value_vector<double> z_eth_varmat;
z_eth_varmat = Eigen::Matrix<double, -1, 1>(N_eth);
stan::math::initialize_fill(z_eth_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_eth_varmat_flat__;
current_statement__ = 14;
assign(z_eth_varmat_flat__, nil_index_list(),
context__.vals_r("z_eth_varmat"),
"assigning variable z_eth_varmat_flat__");
current_statement__ = 14;
pos__ = 1;
current_statement__ = 14;
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
current_statement__ = 14;
assign(z_eth_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_eth_varmat_flat__[(pos__ - 1)],
"assigning variable z_eth_varmat");
current_statement__ = 14;
pos__ = (pos__ + 1);}
}
var_value_vector<double> z_male_eth_varmat;
z_male_eth_varmat = Eigen::Matrix<double, -1, 1>(N_male_eth);
stan::math::initialize_fill(z_male_eth_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_male_eth_varmat_flat__;
current_statement__ = 15;
assign(z_male_eth_varmat_flat__, nil_index_list(),
context__.vals_r("z_male_eth_varmat"),
"assigning variable z_male_eth_varmat_flat__");
current_statement__ = 15;
pos__ = 1;
current_statement__ = 15;
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
current_statement__ = 15;
assign(z_male_eth_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_male_eth_varmat_flat__[(pos__ - 1)],
"assigning variable z_male_eth_varmat");
current_statement__ = 15;
pos__ = (pos__ + 1);}
}
var_value_vector<double> z_state_varmat;
z_state_varmat = Eigen::Matrix<double, -1, 1>(N_state);
stan::math::initialize_fill(z_state_varmat, std::numeric_limits<double>::quiet_NaN());
{
std::vector<local_scalar_t__> z_state_varmat_flat__;
current_statement__ = 16;
assign(z_state_varmat_flat__, nil_index_list(),
context__.vals_r("z_state_varmat"),
"assigning variable z_state_varmat_flat__");
current_statement__ = 16;
pos__ = 1;
current_statement__ = 16;
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
current_statement__ = 16;
assign(z_state_varmat,
cons_list(index_uni(sym1__), nil_index_list()),
z_state_varmat_flat__[(pos__ - 1)],
"assigning variable z_state_varmat");
current_statement__ = 16;
pos__ = (pos__ + 1);}
}
for (int sym1__ = 1; sym1__ <= Kc; ++sym1__) {
vars__.emplace_back(b_varmat[(sym1__ - 1)]);}
vars__.emplace_back(Intercept);
vars__.emplace_back(sd_age_free__);
vars__.emplace_back(sd_educ_free__);
vars__.emplace_back(sd_educ_age_free__);
vars__.emplace_back(sd_educ_eth_free__);
vars__.emplace_back(sd_eth_free__);
vars__.emplace_back(sd_male_eth_free__);
vars__.emplace_back(sd_state_free__);
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
vars__.emplace_back(z_age_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
vars__.emplace_back(z_educ_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
vars__.emplace_back(z_educ_age_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
vars__.emplace_back(z_educ_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
vars__.emplace_back(z_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
vars__.emplace_back(z_male_eth_varmat[(sym1__ - 1)]);}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
vars__.emplace_back(z_state_varmat[(sym1__ - 1)]);}
} catch (const std::exception& e) {
stan::lang::rethrow_located(e, locations_array__[current_statement__]);
// Next line prevents compiler griping about no return
throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
}
} // transform_inits()
inline void get_param_names(std::vector<std::string>& names__) const {
names__.clear();
names__.emplace_back("b_varmat");
names__.emplace_back("Intercept");
names__.emplace_back("sd_age");
names__.emplace_back("sd_educ");
names__.emplace_back("sd_educ_age");
names__.emplace_back("sd_educ_eth");
names__.emplace_back("sd_eth");
names__.emplace_back("sd_male_eth");
names__.emplace_back("sd_state");
names__.emplace_back("z_age_varmat");
names__.emplace_back("z_educ_varmat");
names__.emplace_back("z_educ_age_varmat");
names__.emplace_back("z_educ_eth_varmat");
names__.emplace_back("z_eth_varmat");
names__.emplace_back("z_male_eth_varmat");
names__.emplace_back("z_state_varmat");
names__.emplace_back("r_age_varmat");
names__.emplace_back("r_educ_varmat");
names__.emplace_back("r_educ_age_varmat");
names__.emplace_back("r_educ_eth_varmat");
names__.emplace_back("r_eth_varmat");
names__.emplace_back("r_male_eth_varmat");
names__.emplace_back("r_state_varmat");
names__.emplace_back("b_Intercept");
} // get_param_names()
inline void get_dims(std::vector<std::vector<size_t>>& dimss__) const
final {
dimss__.clear();
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(Kc)});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_age)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_educ)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_educ_age)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_educ_eth)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_eth)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_male_eth)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_state)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_age)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_educ)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_educ_age)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_educ_eth)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_eth)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_male_eth)});
dimss__.emplace_back(std::vector<size_t>{static_cast<size_t>(N_state)});
dimss__.emplace_back(std::vector<size_t>{});
} // get_dims()
inline void constrained_param_names(
std::vector<std::string>& param_names__,
bool emit_transformed_parameters__ = true,
bool emit_generated_quantities__ = true) const
final {
for (int sym1__ = 1; sym1__ <= Kc; ++sym1__) {
{
param_names__.emplace_back(std::string() + "b_varmat" + '.' + std::to_string(sym1__));
}}
param_names__.emplace_back(std::string() + "Intercept");
param_names__.emplace_back(std::string() + "sd_age");
param_names__.emplace_back(std::string() + "sd_educ");
param_names__.emplace_back(std::string() + "sd_educ_age");
param_names__.emplace_back(std::string() + "sd_educ_eth");
param_names__.emplace_back(std::string() + "sd_eth");
param_names__.emplace_back(std::string() + "sd_male_eth");
param_names__.emplace_back(std::string() + "sd_state");
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_educ_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_educ_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_educ_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_male_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_state_varmat" + '.' + std::to_string(sym1__));
}}
if (emit_transformed_parameters__) {
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_educ_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_educ_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_educ_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_male_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_state_varmat" + '.' + std::to_string(sym1__));
}}
}
if (emit_generated_quantities__) {
param_names__.emplace_back(std::string() + "b_Intercept");
}
} // constrained_param_names()
inline void unconstrained_param_names(
std::vector<std::string>& param_names__,
bool emit_transformed_parameters__ = true,
bool emit_generated_quantities__ = true) const
final {
for (int sym1__ = 1; sym1__ <= Kc; ++sym1__) {
{
param_names__.emplace_back(std::string() + "b_varmat" + '.' + std::to_string(sym1__));
}}
param_names__.emplace_back(std::string() + "Intercept");
param_names__.emplace_back(std::string() + "sd_age");
param_names__.emplace_back(std::string() + "sd_educ");
param_names__.emplace_back(std::string() + "sd_educ_age");
param_names__.emplace_back(std::string() + "sd_educ_eth");
param_names__.emplace_back(std::string() + "sd_eth");
param_names__.emplace_back(std::string() + "sd_male_eth");
param_names__.emplace_back(std::string() + "sd_state");
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_educ_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_educ_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_educ_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_male_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
{
param_names__.emplace_back(std::string() + "z_state_varmat" + '.' + std::to_string(sym1__));
}}
if (emit_transformed_parameters__) {
for (int sym1__ = 1; sym1__ <= N_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_educ_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_age; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_educ_age_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_educ_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_educ_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_male_eth; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_male_eth_varmat" + '.' + std::to_string(sym1__));
}}
for (int sym1__ = 1; sym1__ <= N_state; ++sym1__) {
{
param_names__.emplace_back(std::string() + "r_state_varmat" + '.' + std::to_string(sym1__));
}}
}
if (emit_generated_quantities__) {
param_names__.emplace_back(std::string() + "b_Intercept");
}
} // unconstrained_param_names()
inline std::string get_constrained_sizedtypes() const {
stringstream s__;
s__ << "[{\"name\":\"b_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << Kc << "},\"block\":\"parameters\"},{\"name\":\"Intercept\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_age\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_educ\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_educ_age\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_educ_eth\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_eth\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_male_eth\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_state\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"z_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_age << "},\"block\":\"parameters\"},{\"name\":\"z_educ_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ << "},\"block\":\"parameters\"},{\"name\":\"z_educ_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_age << "},\"block\":\"parameters\"},{\"name\":\"z_educ_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_eth << "},\"block\":\"parameters\"},{\"name\":\"z_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_eth << "},\"block\":\"parameters\"},{\"name\":\"z_male_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_male_eth << "},\"block\":\"parameters\"},{\"name\":\"z_state_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_state << "},\"block\":\"parameters\"},{\"name\":\"r_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_age << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_educ_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_educ_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_age << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_educ_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_eth << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_eth << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_male_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_male_eth << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_state_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_state << "},\"block\":\"transformed_parameters\"},{\"name\":\"b_Intercept\",\"type\":{\"name\":\"real\"},\"block\":\"generated_quantities\"}]";
return s__.str();
} // get_constrained_sizedtypes()
inline std::string get_unconstrained_sizedtypes() const {
stringstream s__;
s__ << "[{\"name\":\"b_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << Kc << "},\"block\":\"parameters\"},{\"name\":\"Intercept\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_age\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_educ\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_educ_age\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_educ_eth\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_eth\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_male_eth\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"sd_state\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"z_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_age << "},\"block\":\"parameters\"},{\"name\":\"z_educ_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ << "},\"block\":\"parameters\"},{\"name\":\"z_educ_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_age << "},\"block\":\"parameters\"},{\"name\":\"z_educ_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_eth << "},\"block\":\"parameters\"},{\"name\":\"z_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_eth << "},\"block\":\"parameters\"},{\"name\":\"z_male_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_male_eth << "},\"block\":\"parameters\"},{\"name\":\"z_state_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_state << "},\"block\":\"parameters\"},{\"name\":\"r_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_age << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_educ_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_educ_age_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_age << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_educ_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_educ_eth << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_eth << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_male_eth_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_male_eth << "},\"block\":\"transformed_parameters\"},{\"name\":\"r_state_varmat\",\"type\":{\"name\":\"vector\",\"length\":" << N_state << "},\"block\":\"transformed_parameters\"},{\"name\":\"b_Intercept\",\"type\":{\"name\":\"real\"},\"block\":\"generated_quantities\"}]";
return s__.str();
} // get_unconstrained_sizedtypes()
// Begin method overload boilerplate
template <typename RNG>
inline void write_array(RNG& base_rng__,
Eigen::Matrix<double,Eigen::Dynamic,1>& params_r,
Eigen::Matrix<double,Eigen::Dynamic,1>& vars,
bool emit_transformed_parameters__ = true,
bool emit_generated_quantities__ = true,
std::ostream* pstream = nullptr) const {
std::vector<double> params_r_vec(params_r.size());
for (int i = 0; i < params_r.size(); ++i)
params_r_vec[i] = params_r(i);
std::vector<double> vars_vec;
std::vector<int> params_i_vec;
write_array(base_rng__, params_r_vec, params_i_vec, vars_vec,
emit_transformed_parameters__, emit_generated_quantities__, pstream);
vars.resize(vars_vec.size());
for (int i = 0; i < vars.size(); ++i)
vars(i) = vars_vec[i];
}
template <bool propto__, bool jacobian__, typename T_>
inline T_ log_prob(Eigen::Matrix<T_,Eigen::Dynamic,1>& params_r,
std::ostream* pstream = nullptr) const {
std::vector<T_> 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<int> vec_params_i;
return log_prob<propto__,jacobian__,T_>(vec_params_r, vec_params_i, pstream);
}
inline void transform_inits(const stan::io::var_context& context,
Eigen::Matrix<double, Eigen::Dynamic, 1>& params_r,
std::ostream* pstream__ = nullptr) const {
std::vector<double> params_r_vec;
std::vector<int> 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];
}
};
}
using stan_model = glmr_model_namespace::glmr_model;
#ifndef USING_R
// Boilerplate
stan::model::model_base& new_model(
stan::io::var_context& data_context,
unsigned int seed,
std::ostream* msg_stream) {
stan_model* m = new stan_model(data_context, seed, msg_stream);
return *m;
}
#endif
data {
int<lower=1> N; // number of observations
int y[N]; // response variable
int<lower = 1> K; // number of population-level effects
matrix[N, K] X; // population-level design matrix
int<lower = 1> N_age;
int<lower = 1> N_educ;
int<lower = 1> N_educ_age;
int<lower = 1> N_educ_eth;
int<lower = 1> N_eth;
int<lower = 1> N_male_eth;
int<lower = 1> N_state;
int<lower=1> J_age[N];
int<lower=1> J_educ[N];
int<lower=1> J_educ_age[N];
int<lower=1> J_educ_eth[N];
int<lower=1> J_eth[N];
int<lower=1> J_male_eth[N];
int<lower=1> J_state[N];
real<lower=0.0> prior_scale_sd;
real<lower=0.0> prior_scale_Intercept;
real<lower=0.0> prior_scale_b;
}
transformed data {
int Kc = K - 1;
matrix[N, Kc] Xc; // centered version of X without an intercept
vector[Kc] means_X; // column means of X before centering
vector[Kc] sds_X; // scales of columns of X
for (i in 2:K) {
means_X[i - 1] = mean(X[, i]);
sds_X[i - 1] = sd(X[, i]);
Xc[, i - 1] = X[, i] - means_X[i - 1];
}
}
parameters {
vector[Kc] b_varmat; // population-level effects
real Intercept; // intercept for centered predictors
real<lower=0> sd_age;
real<lower=0> sd_educ;
real<lower=0> sd_educ_age;
real<lower=0> sd_educ_eth;
real<lower=0> sd_eth;
real<lower=0> sd_male_eth;
real<lower=0> sd_state;
vector[N_age] z_age_varmat;
vector[N_educ] z_educ_varmat;
vector[N_educ_age] z_educ_age_varmat;
vector[N_educ_eth] z_educ_eth_varmat;
vector[N_eth] z_eth_varmat;
vector[N_male_eth] z_male_eth_varmat;
vector[N_state] z_state_varmat;
}
transformed parameters {
vector[N_age] r_age_varmat = sd_age * z_age_varmat;
vector[N_educ] r_educ_varmat = sd_educ * z_educ_varmat;
vector[N_educ_age] r_educ_age_varmat = sd_educ_age * z_educ_age_varmat;
vector[N_educ_eth] r_educ_eth_varmat = sd_educ_eth * z_educ_eth_varmat;
vector[N_eth] r_eth_varmat = sd_eth * z_eth_varmat;
vector[N_male_eth] r_male_eth_varmat = sd_male_eth * z_male_eth_varmat;
vector[N_state] r_state_varmat = sd_state * z_state_varmat;
}
model {
y ~ bernoulli_logit_glm(Xc, Intercept + r_age_varmat[J_age]
+ r_educ_varmat[J_educ]
+ r_educ_age_varmat[J_educ_age]
+ r_educ_eth_varmat[J_educ_eth]
+ r_eth_varmat[J_eth]
+ r_male_eth_varmat[J_male_eth]
+ r_state_varmat[J_state], b_varmat);
// rstanarm default priors
b_varmat ~ normal(0.0, prior_scale_b ./ sds_X);
Intercept ~ normal(0.0, prior_scale_Intercept);
z_age_varmat ~ std_normal();
z_educ_varmat ~ std_normal();
z_educ_age_varmat ~ std_normal();
z_educ_eth_varmat ~ std_normal();
z_eth_varmat ~ std_normal();
z_male_eth_varmat ~ std_normal();
z_state_varmat ~ std_normal();
// custom sd priors -- rstanarm default is 1.0
sd_age ~ exponential(prior_scale_sd);
sd_educ ~ exponential(prior_scale_sd);
sd_educ_age ~ exponential(prior_scale_sd);
sd_educ_eth ~ exponential(prior_scale_sd);
sd_eth ~ exponential(prior_scale_sd);
sd_male_eth ~ exponential(prior_scale_sd);
sd_state ~ exponential(prior_scale_sd);
}
generated quantities {
// actual population-level intercept
real b_Intercept = Intercept - dot_product(means_X, b_varmat);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment