I simulated a set of data

```
library(tidyverse)
df <- tibble(
x = seq(from = -13, to = 13, by = 1),
z = rnorm(n = 27, mean = 4.8 + 0.35 * x, sd = 2),
y = rpois(n = 27, lambda = exp(0.18 - 0.13 * z))
)
df %>% head(5)
# A tibble: 5 × 3
# x z y
# <dbl> <dbl> <int>
#1 -13 1.57 1
#2 -12 -0.705 1
#3 -11 4.47 0
#4 -10 0.123 0
#5 -9 -0.471 3
```

I want to recover the parameters \beta s,

\begin{aligned}
y_{i} &\sim \text{Poisson}\left( \lambda_i\right) \\
\lambda_i &=\exp \left(\beta_1 + \beta_2 z_i\right) \\
z_i & \sim \text{Normal}\left( \beta_3 + \beta_4 x_i, \sigma\right) \\
\end{aligned}

```
data {
int<lower=1> N;
vector[N] x;
array[N] int y;
}
parameters {
vector[4] beta;
real<lower=0> sigma;
}
model {
vector[N] z;
beta ~ normal(0, 20);
sigma ~ exponential(1);
z ~ normal(beta[3] + beta[4] * x, sigma);
y ~ poisson_log(beta[1] + beta[2] * z);
}
```

but the model failed, pop up a message without samping

```
Running MCMC with 4 sequential chains...
```

I don’t know how to solve it. Thank you very much for your help.

code.Rmd (1.4 KB)

You need to move `z`

to the parameters block.

To see why, recall that `z ~ normal(beta[3] + beta[4] * x, sigma)`

is just a shorthand for `target += normal_lupdf(z | beta[3] + beta[4] * x, sigma)`

. But `z`

is just an empty vector at this point; it doesn’t contain anything. You’re expecting `z ~ normal(beta[3] + beta[4] * x, sigma)`

to *define* `z`

to be a sample from the distribution on the right-hand side of the `~`

, but that’s not how Stan works.

The lack of an informative error message here is definitely not ideal, though. @WardBrian @stevebronder @rok_cesnovar , on my system if I run the rmd provided in the OP I can compile the model and run the line

```
fit <- model$sample(data = stan_data, refresh = 1)
```

with no warning messages or errors. Clearly it doesn’t sample; the only output to the console is

```
Running MCMC with 4 sequential chains...
```

But I only see an error if I then run, e.g.

```
> fit
Error: Fitting failed. Unable to print.
```

I have range checks turned off; but I don’t think that should matter?

```
> cmdstan_make_local()
[1] "STAN_THREADS=false" "STAN_NO_RANGE_CHECKS=true" "CXXFLAGS_OPTIM=-march=native -mtune=native"
```

@Wang_MinJie , as an aside, even once you fix this I don’t think you can expect this model to do a good job of parameter recovery. The parameters are not identified except via the prior (which is very weak). In particular, I can multiply `beta[3]`

, `beta[4]`

, and `sigma`

by a constant and divide `beta[2]`

by the same constant and the model will be completely unchanged.

5 Likes

Thank you for your help. The problem that has been troubling for a long time has been solved.

There is a problem with the model. I need to modify it