Initialisation problems with a multivariate model

Hi,
I am trying to use for the first time multivariate models.
I read the manual.
I did two models following it (with and without " Optimization through Cholesky factorization").
In both cases, there are initialisation problems. I’ll copy the error messages below each model.
The observations (y) are integers, that can be positive, negative or zero.

  1. Without Cholesky factorization
data {
  int<lower=0> N;              // num individuals (observations)
  int<lower=1> K;              // num ind predictors (= nb of species)
  int<lower=1> J;              // num groups (= nb of species)
  int<lower=1> L;              // num group predictors (1?)
  int<lower=1,upper=J> jj[N];  // group for individual (species)
  matrix[N, K] x;              // individual predictors (all abundances at time t)
  row_vector[L] u[J];          // group predictors (1 everywhere)
  vector[N] y;                 // outcomes (abundance of focal species at time t)
}
parameters {
  corr_matrix[K] Omega;        // prior correlation
  vector<lower=0>[K] tau;      // prior scale
  matrix[L, K] gamma;          // group coeffs
  vector[K] beta[J];           // indiv coeffs by group
  real<lower=0> sigma;         // prediction error scale
}
model {
  tau ~ cauchy(0, 2.5);
  Omega ~ lkj_corr(2);
  to_vector(gamma) ~ normal(0, 5);
  {
    row_vector[K] u_gamma[J];
    for (j in 1:J)
      u_gamma[j] = u[j] * gamma;
    beta ~ multi_normal(u_gamma, quad_form_diag(Omega, tau));
  }
  {
    vector[N] x_beta_jj;
    for (n in 1:N)
      x_beta_jj[n] = x[n] * beta[jj[n]];
    y ~ normal(x_beta_jj, sigma);
  }
}

Errors :

Repeated message :

Chain 1: Exception: lkj_corr_lpdf: Shape parameter is 0, but must be > 0!  (in 'model1d032109b2a5f_Model' at line 20)

And at the last message :

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 in sampler$call_sampler(args_list[[i]]) : Initialization failed."
error occurred during calling the sampler; sampling not done
  1. With Cholesky factorization
data {
  int<lower=0> N;              // num individuals (observations)
  int<lower=1> K;              // num ind predictors (= nb of species)
  int<lower=1> J;              // num groups (= nb of species)
  int<lower=1> L;              // num group predictors (1?)
  int<lower=1,upper=J> jj[N];  // group for individual (species)
  matrix[N, K] x;              // individual predictors (all abundances at time t)
  matrix[L, J] u;          // group predictors (1 everywhere)
  vector[N] y;                 // outcomes (abundance of focal species at time t)
}
parameters {
  matrix[K, J] z;
  cholesky_factor_corr[K] L_Omega;
  vector<lower=0,upper=pi()/2>[K] tau_unif;  // prior scale
  matrix[K, L] gamma;                        // group coeffs
  real<lower=0> sigma;                       // prediction error scale
}
transformed parameters {
  vector<lower=0>[K] tau = 2.5 * tan(tau_unif);
  matrix[K, J] beta = gamma * u + diag_pre_multiply(tau, L_Omega) * z;
}
model {
  vector[N] mu;
  for(n in 1:N) {
    mu[n] = x[n, ] * beta[, jj[n]];
  }
  to_vector(z) ~ std_normal();
  L_Omega ~ lkj_corr_cholesky(2);
  to_vector(gamma) ~ normal(0, 5);
  y ~ normal(mu, sigma);
}

Repeated message :

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.

Final message :

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 in sampler$call_sampler(args_list[[i]]) : Initialization failed."
error occurred during calling the sampler; sampling not done

I don’t see what to do since I don’t know the maths…if some of you have an idea, I would be happy to try it !

1 Like

The case of the first model looks pretty weird as you pass a constant 2 as the shape parameter. Are you sure you posted the model code that produced this message?

In the second case, the most suspicious is the computation of tau - but I don’t see anything obviously wrong.

In both cases you can use print statements in your code to see intermediate values and discover where infinities/zeroes or other problematic values creep in. Which could provide more hints.

Best of luck with your model!