I get this error several times until the model fails:
Chain 4 Exception: Exception: neg_binomial_2_log_glm_lpmf: Failures variables[15] is -1.45964e+09, but must be nonnegative! (in ‘C:/Users/x/AppData/Local/Temp/Rtmp2D4vAA/model-395423e33d2a.stan’, line 28, column 4 to column 88) (in ‘C:/Users/x/AppData/Local/Temp/Rtmp2D4vAA/model-395423e33d2a.stan’, line 85, column 4 to column 120)
Chain 4 Initialization between (-2, 2) failed after 100 attempts.
Chain 4 Try specifying initial values, reducing ranges of constrained values, or reparameterizing the model.
Warning: Chain 4 finished unexpectedly!
Any help to solve this error would be much appreciated.
Lines 24-30:
for (n in 1:N) {
// add more terms to the linear predictor
int nn = n + start - 1;
mu[n] += r_1_1[J_1[nn]] * Z_1_1[nn];
}
ptarget += neg_binomial_2_log_glm_lpmf(Y[start:end] | XQ[start:end], mu, bQ, shape);
return ptarget;
}
Lines 83-87:
model {
// likelihood including constants
if (!prior_only) {
target += reduce_sum(partial_log_lik_lpmf, seq, grainsize, Y, bQ, Intercept, XQ, offsets, shape, J_1, Z_1_1, r_1_1);
}
Full model:
// full model
// generated with brms 2.16.4
functions {
/* integer sequence of values
* Args:
* start: starting integer
* end: ending integer
* Returns:
* an integer sequence from start to end
*/
int[] sequence(int start, int end) {
int seq[end - start + 1];
for (n in 1:num_elements(seq)) {
seq[n] = n + start - 1;
}
return seq;
}
// compute partial sums of the log-likelihood
real partial_log_lik_lpmf(int[] seq, int start, int end, data int[] Y, vector bQ, real Intercept, data matrix XQ, data vector offsets, real shape, data int[] J_1, data vector Z_1_1, vector r_1_1) {
real ptarget = 0;
int N = end - start + 1;
// initialize linear predictor term
vector[N] mu = Intercept + rep_vector(0.0, N) + offsets[start:end];
for (n in 1:N) {
// add more terms to the linear predictor
int nn = n + start - 1;
mu[n] += r_1_1[J_1[nn]] * Z_1_1[nn];
}
ptarget += neg_binomial_2_log_glm_lpmf(Y[start:end] | XQ[start:end], mu, bQ, shape);
return ptarget;
}
}
data {
int<lower=1> N; // total 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
vector[N] offsets;
int grainsize; // grainsize for threading
// data for group-level effects of ID 1
int<lower=1> N_1; // number of grouping levels
int<lower=1> M_1; // number of coefficients per level
int<lower=1> J_1[N]; // grouping indicator per observation
// group-level predictor values
vector[N] Z_1_1;
int prior_only; // should the likelihood be ignored?
}
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
// matrices for QR decomposition
matrix[N, Kc] XQ;
matrix[Kc, Kc] XR;
matrix[Kc, Kc] XR_inv;
int seq[N] = sequence(1, N);
for (i in 2:K) {
means_X[i - 1] = mean(X[, i]);
Xc[, i - 1] = X[, i] - means_X[i - 1];
}
// compute and scale QR decomposition
XQ = qr_thin_Q(Xc) * sqrt(N - 1);
XR = qr_thin_R(Xc) / sqrt(N - 1);
XR_inv = inverse(XR);
}
parameters {
vector[Kc] bQ; // regression coefficients at QR scale
real Intercept; // temporary intercept for centered predictors
real<lower=0> shape; // shape parameter
vector<lower=0>[M_1] sd_1; // group-level standard deviations
vector[N_1] z_1[M_1]; // standardized group-level effects
}
transformed parameters {
vector[N_1] r_1_1; // actual group-level effects
real lprior = 0; // prior contributions to the log posterior
r_1_1 = (sd_1[1] * (z_1[1]));
lprior += student_t_lpdf(bQ | 3, 0, 1);
lprior += student_t_lpdf(Intercept | 3, 0, 1);
lprior += gamma_lpdf(shape | 0.01, 0.01);
lprior += student_t_lpdf(sd_1 | 3, 0, 1)
- 1 * student_t_lccdf(0 | 3, 0, 1);
}
model {
// likelihood including constants
if (!prior_only) {
target += reduce_sum(partial_log_lik_lpmf, seq, grainsize, Y, bQ, Intercept, XQ, offsets, shape, J_1, Z_1_1, r_1_1);
}
// priors including constants
target += lprior;
target += std_normal_lpdf(z_1[1]);
}
generated quantities {
// obtain the actual coefficients
vector[Kc] b = XR_inv * bQ;
// actual population-level intercept
real b_Intercept = Intercept - dot_product(means_X, b);
// additionally sample draws from priors
real prior_bQ = student_t_rng(3,0,1);
real prior_Intercept = student_t_rng(3,0,1);
real prior_shape = gamma_rng(0.01,0.01);
real prior_sd_1 = student_t_rng(3,0,1);
// use rejection sampling for truncated priors
while (prior_shape < 0) {
prior_shape = gamma_rng(0.01,0.01);
}
while (prior_sd_1 < 0) {
prior_sd_1 = student_t_rng(3,0,1);
}
}