I’m trying to fit a hierachical model described by this paper, A Bayesian spatio-temporal model of COVID-19 spread in England | Scientific Reports. Yet I can’t seem to figure out this message:
Chain 1: Rejecting initial value:
Chain 1: Gradient evaluated at the initial value is not finite.
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.
I’ve tried initialising everything to 0 at the start, and printing each of the parameters, but none of them are nan
, so I’m not too sure what’s going on. Model code is below. Any help would be greatly appreciated.
data {
int<lower=0> s; // number of spatial locations
int<lower=0> t; // number of time points
int<lower=0> k; // number of covariates
vector<lower=0>[t*s] N; // population
int<lower=0> y[t*s]; // response data
matrix[s, k] X; // dependent data
cov_matrix[s] big_sigma_w;
}
parameters {
vector[k] beta; // covariates
vector[s] w[t]; // spatial random effect
vector[s] xi_start; // first value of xi
real<lower=0> sigma_w; // Spatial variance parameter
real<lower=-1, upper=1> alpha; // Temporal dependence parameter
}
transformed parameters {
// Transform
vector[s] N_vec[t];
for (i in 1:t) {
N_vec[i] = to_vector(N[((i - 1) * s + 1):(i * s)]);
}
vector[s] xi[t]; // spatio-temporal random effect
xi[1] = xi_start; // Assign first value
if (t > 1){
for (i in 2:t){
xi[i] = alpha * xi[i-1] + w[i];
}
}
vector[s] log_theta[t]; // infection risk
vector[s] mu[t]; // mean
for(i in 1:t){
log_theta[i] = X * beta + xi[i];
mu[i] = N_vec[i] .* exp(log_theta[i]);
}
vector[t*s] mu_flat;
for (i in 1:t) {
mu_flat[((i - 1) * s + 1):(i * s)] = mu[i];
}
}
model {
// Penalized complexity prior for sigma_w using Half-Normal
// This ensures p(sigma_w >1) = 0.01
sigma_w ~ normal(0, 0.43); // Adjust the standard deviation as needed
// // Apply Beta prior to bound_alpha, which is transformed to alpha
// // This ensures p(alpha > 0) = 0.9
// bound_alpha ~ beta(2, 20);
xi_start ~ normal(0, sigma_w^2 / (1 - alpha^2));
beta ~ normal(0, 1000);
w ~ multi_normal(rep_vector(0, s), sigma_w^2*big_sigma_w);
for (i in 1:t*s){
y[i] ~ poisson(mu_flat[i]);
}
for (i in 1:t*s){
print("mu_flat[", i, "] = ", mu_flat[i]);
print("y[", i, "] = ", y[i]);
}
// for(i in 1:k){
// print("beta[", i, "]", beta[k]);
// }
// for( i in 1:t){
// print("w[", i, "]", w[i]);
// }
// print("sigma_w = ", sigma_w);
// print("alpha = ", alpha);
}
generated quantities {
vector[t*s] fitted_values;
for (i in 1:t*s) {
fitted_values[i] = poisson_rng(mu_flat[i]);
}
}
Trying with the full dataset gives this 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.
Thanks all