I am trying to write a bayesian APC model with second-order random walk priors assigned to age, cohort, and period effects in stan. However, after running the model, an error:
‘Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can’t start sampling from this initial value.’
always appears. In my code, ‘log function’ is not used. So I cannot figure out the bugs in my code. Please help me to debug, I have been struggling in this program for quite a few days… Thank you!!
apc_model = "
data {
int<lower=1> I; // Number of observations
int<lower=0> cases [I] ; // Cases
vector[I] pyr; // Person-years at risk
vector[16] age; // Age group indicators
vector[23] coh; // Cohort group indicators
vector[9] per; // Period group indicators
}
parameters {
vector<lower=-1000,upper=1000>[16] alpha; // Age effects
vector<lower=-1000,upper=1000>[23] gamma; // Cohort effects
vector<lower=-1000,upper=1000>[9] beta; // Period effects
real<lower=1> sigma_a; // Standard deviation for age effects
real<lower=1> sigma_c; // Standard deviation for cohort effects
real<lower=1> sigma_p; // Standard deviation for period effects
}
transformed parameters {
vector[16] lambda1;
vector[23] lambda2;
vector[9] lambda3;
real tau_a = pow(sigma_a, -2);
real tau_c = pow(sigma_c, -2);
real tau_p = pow(sigma_p, -2);
lambda1 = alpha .* age;
lambda2 = coh .* gamma;
lambda3 = per .* beta;
}
model {
matrix[16, 9] mu;
for (a in 1:16) {
for (p in 1:9) {
mu[a, p] = 100000 * exp(alpha[a] + beta[p] + gamma[p - a + 16]);
// Likelihood
}
}
cases ~ poisson(to_row_vector(mu));
// Age effects
alpha[1] ~ normal(0, sqrt(1e-6 * tau_a));
alpha[2] ~ normal(0, sqrt(1e-6 * tau_a));
for (a in 3:16) {
alpha[a] ~ normal(2 * alpha[a - 1] - alpha[a - 2], sqrt(tau_a));
}
// Cohort effects
gamma[1] ~ normal(0, sqrt(1e-6 * tau_c));
gamma[2] ~ normal(0, sqrt(1e-6 * tau_c));
for (c in 3:23) {
gamma[c] ~ normal(2 * gamma[c - 1] - gamma[c - 2], sqrt(tau_c));
}
// Period effects
beta[1] ~ normal(0, sqrt(1e-6 * tau_p));
beta[2] ~ normal(0, sqrt(1e-6 * tau_p));
for (p in 3:9) {
beta[p] ~ normal(2 * beta[p - 1] - beta[p - 2], sqrt(tau_p));
}
// Priors for standard deviations
sigma_a ~ uniform(1, 1000);
sigma_c ~ uniform(1, 1000);
sigma_p ~ uniform(1, 1000);
}"
The error message:
SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 1).
Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can't start sampling from this initial value.
Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can't start sampling from this initial value.
Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can't start sampling from this initial value.
Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can't start sampling from this initial value.
Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can't start sampling from this initial value.
Chain 1:
Chain 1: Initialization between (-2, 2) failed after 100 attempts.
Chain 1: Try specifying initial values, reducing ranges of constrained values, or reparameterizing the model.
[1] "Error : Initialization failed."
[1] "error occurred during calling the sampler; sampling not done"