I am writing my first stan program, with Rstan interface. in the model below, if I declare the betavar variable as a local variable in the model block, the code runs, but the values of betavar is not saved. If I declare the betavar in the transformed parameters block, I get an error :
52: n4= abs(l-ll);
53: sumn = n1+n2+n3+n4;
54: betavar = sigbeta2*(gam^sumn);
^
55: if (sumn == 0) beta[n1,n2,n3,n4] =0
PARSER EXPECTED:
Error in stanc(file = file, model_code = model_code, model_name = model_name, :
failed to parse Stan model ‘b88c4f5b4184fcf2b7d34fb060c58a97’ due to the above error.
Here is the model part. Any help would be much appreciated.
Nitai
data {
int<lower=1> xdim;
int<lower=1> ydim;
int<lower=1> zdim;
int<lower=1> tdim;
real YData[64,64,33,210];
}
parameters {
real beta[6,6,6,6];
real gam;
}
transformed parameters {
real<lower=0> sig2;
real<lower=0> sigbeta2;
real betavar;
}
model {
real Ymean;
int xliml;
int yliml;
int zliml;
int tliml;
int xlimu;
int ylimu;
int zlimu;
int tlimu;
int n1;
int n2;
int n3;
int n4;
int sumn;
for( i in 1:xdim) {
for( j in 1:ydim) {
for( k in 1:zdim) {
for( l in 1:tdim) {
Ymean = 0.0;
xliml =max(1, i-5);xlimu = min(i+5, xdim);
yliml =max(1, j-5); ylimu = min(j+5, ydim);
zliml =max(1, k-5); zlimu = min(k+5, zdim);
tliml =max(1, l-5); tlimu = min(l+5, tdim);
for(ii in xliml:xlimu){
for(jj in yliml:ylimu){
for(kk in zliml:zlimu){
for(ll in tliml:tlimu){
n1<- abs(i-ii);
n2= abs(j-jj);
n3= abs(k-kk);
n4= abs(l-ll);
sumn = n1+n2+n3+n4;
betavar = sigbeta2*(gam^sumn);
if (sumn == 0) beta[n1,n2,n3,n4] =0
else
beta[n1,n2,n3,n4] ~ normal(0.0, betavar);
Ymean = Ymean + YData[ii,jj,kk,ll]*beta[n1,n2,n3,n4];
} } } }
YData[i,j,k,l] ~ normal(Ymean, sig2);
}}}}
gam ~ uniform(0,1);
sig2 ~ inv_gamma(1,1);
sigbeta2 ~ inv_gamma(1,1);
}