"Ill-formed expression. Found identifier. There are many ways to complete this to a well-formed expression."

I am attempting to fit a non-liner model with brms but keep getting the following error:
Compiling Stan program…
Error in stanc(file = file, model_code = model_code, model_name = model_name, : 0
Syntax error in ‘string’, line 27, column 38 to column 39, parsing error:
Ill-formed expression. Found identifier. There are many ways to complete this to a well-formed expression.

R 4.2.2
brms 2.18.0
Operating System: Windows 10

Code that reproduces error but with simulated data.

library(brms)

#simulate data
set.seed <- 1234
age <- rep(seq(1,10,1),10)
Linf <- 750
K <- 0.5
t0 <- -1.2
noise <- rnorm(length(age),0,35)
tl <- Linf * (1 - exp(-K * (age - t0))) + noise


#Package data
datalst <- data.frame(tl = tl,age=age)

#Set formula
formula <- bf(tl ~ Linf * (1 - exp(-K * (age - t0))),
              # Nonlinear variables
              Linf + K + t0 ~ 1,
              #Nonlinear fit
              nl = TRUE)

#Set priors
prior1 <- prior("normal(mean = 600, sd = 100)", nlpar = "Linf") +
  prior("normal(mean = 0, sd = 1)", nlpar = "K") +
  prior("normal(mean = 0, sd = 5)", nlpar = "t0")

#Set initial values
inits <- list(
  Linf = 600,
  K = 0.1,
  t0  = 2
)

fit1 <- brm(formula,
            family=gaussian(),
            data = datalst,
            prior = prior1,
            init = inits,
            chains=3,
            cores=3,
            iter=4000,
            warmup = 2000)

#Check code for line 27
stancode <- make_stancode(formula,
                          family=gaussian(),
                          data = datalst,
                          prior = prior1)

Line 27 from the stan code is:

  lprior += normal_lpdf(b_Linf | mean = 600, sd = 100);

This does not look suspect to me. I have tried different means and sd for the prior and keep getting the same error.

I am able to run the nonlinear model example at:
https://cran.r-project.org/web/packages/brms/vignettes/brms_nonlinear.html
Which makes me think there is something wrong with the model I am specifying. But I don’t know how that connects to line 27 since the prior on b_Linf looks correct.

Thanks in advance for any help!

Jason

Using named parameter values in priors isn’t supported, so where you have

normal(mean = 600, sd = 100)

That should just be:

normal(600, 100)
2 Likes

Thank you!