Hi all,
I’m trying to reproduce the Stan model from here:
https://mc-stan.org/docs/2_24/stan-users-guide/measurement-error-models.html
I’ve saved the model as model.stan
:
functions {
vector sho(real t,
vector y,
real theta) {
vector[2] dydt;
dydt[1] = y[2];
dydt[2] = -y[1] - theta * y[2];
return dydt;
}
}
data {
int<lower=1> T;
vector[2] y[T];
real t0;
real ts[T];
}
parameters {
vector[2] y0;
vector<lower=0>[2] sigma;
real theta;
}
model {
vector[2] mu[T] = ode_rk45(sho, y0, t0, ts, theta);
sigma ~ normal(0, 2.5);
theta ~ std_normal();
y0 ~ std_normal();
for (t in 1:T)
y[t] ~ normal(mu[t], sigma);
}
In R, the code I’m running to run the model is:
library(rstan)
fit <- stan(
file='model.stan',
data = list(
T = 10,
y0 = c(0,0),
t0 = 0,
ts = 1:10,
theta = .1
),
chains = 1,
iter = 500)
And the error I’m getting is this:
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
Variable "sho" does not exist.
error in 'model10f3714c306f_model' at line 23, column 32
-------------------------------------------------
21: }
22: model {
23: vector[2] mu[T] = ode_rk45(sho, y0, t0, ts, theta);
^
24: sigma ~ normal(0, 2.5);
-------------------------------------------------
Error in stanc(file = file, model_code = model_code, model_name = model_name, :
failed to parse Stan model 'model' due to the above error.
It’s been driving me a little crazy since it seems like I’m defining sho
all of 20 lines up from where it’s being passed to ode_rk45
, but maybe I’m doing something wrong?
Any advice would be appreciated. Thanks in advance.