Infinite gradient warning when including transformed parameters unrelated to the log likelihood

So I am building a complex model and doing some prior predictive checks. Essentially the way things work right now is that

  • in model I sample the parameters
  • in transformed parameters the parameters get transformed into quantities of interest
  • nothing in transformed parameters gets passed back into model (because I am doing a prior predictive check; when I move to the next step this will ultimately create a prediction that will get passed into the likelihood statement)

Here’s the rub. When I comment out the transformed parameters block, everything samples okay. When it is uncommented, I get this warning:

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.

it doesn’t matter if I set init = 0 or whatever.

Since no variables from transformed parameters make it into the model block, I don’t understand how having the transformed parameters commented or uncommented should change whether the gradient is finite or not.

I’ve checked using print statements to ensure that none of the variables in transformed parameters are inf or nan.

I’d rather not share the code publicly, so more wondering how this can happen and generally what I can do to fix. I am using rstan version 2.19.1

Hi Thomas,

The transformed parameters block should only be used for quantities that are then also used in the model block. Try moving your computation for these quantities into the generated quantities block, since the computations in generated quantities don’t involve any gradient calculations.

The problem is that I am doing a prior predictive check, and ultimately want to pass in the result of the transformed parameters block back into model. I’m just not doing it right now.

Is the idea that when I ultimately do that, the error will go away?

Oh, I see what you mean sorry. No, the idea was more that the calculations were resulting in a non-finite gradient for one (or more) of the variables, so by moving them to generated quantities you no longer need to worry about the gradients.

In Stan, any variables/computations in the transformed parameters block will require the gradients also be computed, whereas the generated quantities block will only compute the value.

I would still try running the model with the calculations in generated quantities first, just to check that the calculations are consistent with what you expect. It might be that there is a syntax/indexing error that’s tripping you up, and it won’t be apparent until you run the model.

If the syntax is correct, that gets a bit harder to debug. I’d start by iteratively commenting out or simplifying different calculations in the transformed parameters block, so you can narrow down which specific line is causing the issue.

Unfortunately, there’s no simple way to print the gradients at each iteration in a Stan model (print will print the value, but not the gradient). This forum post outlines how to print the gradients to a separate file, but I’m not sure how informative that output is (I’ve never used it).

If all else fails, feel free to PM me your model and I can take a closer look.

Good luck!

Thank you!

This is really helpful. I will begin the iterative commenting-of-things-in-and-out.

1 Like