Gamma distribution samples nan at initialization with apparently reasonable parameters

I’m trying to run a hierarchical model in which duration of a hypothetical process is drawn from a gamma distribution; the parameters of the gamma vary between individuals, and are drawn from a population distribution. The model fails to initialize; the error message points at the line with the gamma sampling, stating that it produces nan. When I print the parameters of the gamma, they look reasonable (mostly between 1 and 10). My code and data are attached.
IMSalience6_demo1.stan (2.8 KB)
IMSalience6Demo.R (572 Bytes)
IMSalience6_DemoData.RData (853.5 KB)

Is any of your data nan/negative/zero?

Looks like the problem is line 103

    t1 ~ gamma(Tshape, Trate);

Here t1 is neither a parameter nor data but a local variable declared in the model block. Despite being called a “sampling statement” this does not draw and assign a new value to the left-hand side. Instead, it computes the likelihood of the lefthand-side. In fact it is basically

   target += gamma_lpdf(t1 | Tshape, Trate);

This works only if t1 is already initialized. Since it’s unknown it must be declared in the parameters block.

parameters {
  vector<lower=0>[N] t1;

Another thing that caught my attention is line 115-116

    logLik += sum(Lik);
    target += logLik;

logLik has not been initialized so incrementing just gives NaN, and if logLik is a cumulative quantity then maybe target += is supposed to be ouside the loop?
Also, it’s strange to go from Lik to logLik without taking a logarithm. If it’s mean to be log(sum(Lik)) then note that log_sum_exp(log(x) + y) is usually more stable than log(sum(x*exp(y))).

1 Like

Thanks a lot, this solved my problem!