I have a working stan model (tested using cmdstan 2.25.0) that uses the ode_rk45 differential equation solver to generate multinomial probabilities \mathbf z_t for observations at many different times t, in many different experimental units from several treatments. In the transformed parameters block:
z[tindex:(ntimesinblock[j, k] + tindex - 1)] = ode_rk45(dz_dt, zinit, t0, timeblocks[j, k, 1:ntimesinblock[j, k]], a0[depthcode[j]], a1[depthcode[j]], a1y1star[depthcode[j]], a2[depthcode[j]], deltab0[depthcode[j]], b1[depthcode[j]], b2[depthcode[j]]);
The user-defined function dz_dt returns the derivatives, given initial values zinit, initial time t0, parameters a_0, \ldots, b_2. Everything else is just indexing the times, treatments, etc, with ntimesinblock, timeblocks, depthcode supplied as data (the indexing is complicated because the treatments cause discontinuous changes at time points that differ between experimental units).
I want to use SBC via rstan to check whether sampling is working OK. In the transformed data block, I tried the same thing, having defined new variables z_, zinit_, t0_, a0_, …, b2_:
z_[tindex:(ntimesinblock[j, k] + tindex - 1)] = ode_rk45(dz_dt, zinit_, t0_, timeblocks[j, k, 1:ntimesinblock[j, k]], a0_[depthcode[j]], a1_[depthcode[j]], a1y1star_[depthcode[j]], a2_[depthcode[j]], deltab0_[depthcode[j]], b1_[depthcode[j]], b2_[depthcode[j]]);
and I get (with rstan 2.21.2)
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
Variable “dz_dt” does not exist.
Are there restrictions on calling user-defined functions from the transformed data block, or have I done something else wrong? The working (non-SBC) version and data attached.
aureliaode_overgrowth.stan (4.6 KB)
dynamicdata.txt (29.4 KB)