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)))`

.

Thanks a lot, this solved my problem!