Errors when doing compilation in RStan model with integration

For all Stan experts and users
@bgoodri @ScottAlder @bbbales2 @stemangiola
when compiling following code, I am getting errors:
SAMPLING FOR MODEL ‘a3fc5f3f8314f35eb844526c8bbadc9d’ NOW (CHAIN 1).
Chain 1: Rejecting initial value:
Chain 1: Log probability evaluates to log(0), i.e. negative infinity.
Chain 1: Stan can’t start sampling from this initial value.
Chain 1:
Chain 1: Initialization between (-2, 2) failed after 1 attempts.

I can’t understand how to solve these. Could you please tell me why is this error getting?

I am copying my stan file for your reference,

``````functions{
real fun_integral(real x,
real xc,
real[] theta,
real[] x_r,
int[] x_i){

real mu = theta[1];
real sigma2 = theta[2];
real fun;
fun = (0.3*exp(-square(log(x)-mu)/2*sigma2)/sqrt(2*pi()*sigma2)*x);
return(fun);
}
}

data{ //variables in the likelihood function
int n;
int m;
matrix[n,m] MT;
int K;
}

transformed data {
real x_r[0];
int x_i[0];
}

parameters{
real<lower=4.0,upper=4.5> mu;
real<lower=0.01,upper=0.05> sigma2;
}

model{
mu ~ uniform(4.0,4.5);
sigma2 ~ uniform(0.1,0.5);

for(i in 1:5){
vector[3] V;
vector[5] t;
t[1]=50;
for(j in 2:5){
t[j] = t[j-1]+1;
}
V[1] = integrate_1d(fun_integral,t[1],t[2],{mu,sigma2},{0.0}, x_i, 1e-8);
target += pow(V[1],MT[i,1]);

for(k in 2:K){
V[k] = integrate_1d(fun_integral,t[k],t[k+1],{mu,sigma2},{0.0}, x_i, 1e-8);
target += pow(V[k],MT[i,k]);
}
}
}
'
``````

Here, MT is a matrix and

``````m=ncol(MT)
K=2
data<-list(MT=MT,n=n,m=m,K=K)
``````

Can you post the code that you are using to run the model?

1 Like

I think the way to debug stuff like this is to try to break things down into a small a piece as possible.

1. If you don’t have the integrals, do things work?
2. Are the integrals returning the values you expect? (add `print` statements to your code to debug this)
2 Likes

Hi Ara, @Ara_Winter

``````
n_chains <- 2
inits<-list()
for (chain in 1:n_chains) inits[[chain]]<-initializer()
fit<-stan(model_code = data_code, data = file_data,  warmup = 150,
iter = 300, chains =n_chains,thin = 1,init=inits)`````````

@bbbales2 Thanks for the reply, I don’t how to check whether each line gives me an output or not using c++, but I did it in R, so have to change this integral_1d() to integration(), Am I correct? So then, I could have results. But, I didn’t check this code without the integration,I ll try it now.

This is how I defined initializers for my code and stan() line.

``````initializer <- function() list("mu"=runif(1,4.0,4.5),"sigma2"=runif(1,0.01,0.05))
``````
``````n_chains <- 2
inits<-list()
for (chain in 1:n_chains) inits[[chain]]<-initializer()
fit<-stan(model_code = file_code, data =file_data,  warmup = 150,
iter = 300, chains =n_chains,thin = 1,init=inits)
``````

This is a part of my data matrix,
Age n1 s1 r1 n2 s2 r2
[1,] 50 3993 7 1 3985 6 1
[2,] 51 4020 9 1 3983 7 1
[3,] 52 4009 10 1 3982 8 1
[4,] 53 4025 12 2 3979 10 2
[5,] 54 4059 14 2 3977 11 2
[6,] 55 3939 17 2 3974 13 2

`print` debugging works in Stan, so I might add prints around:

``````V[1] = integrate_1d(fun_integral,t[1],t[2],{mu,sigma2},{0.0}, x_i, 1e-8);
``````

as a start.

Like, `print(V[1])` and `print(t[1], t[2], mu, sigma2)` and see if everything makes sense (and you can verify the integrals externally in R).

You can use rstan’s `expose_stan_functions` (Expose user-defined Stan functions to <span style="R">R</span> for testing and simulation — expose_stan_functions • rstan) to expose functions you write in Stan to R to test them as well.

``````print(V[1]);
print(t[1],t[2])
print(mu,sigma2)
``````

and it printed for all i (looping over i = 1:5)

1).
Chain 1: 46.0932
5051
4.178590.0171743
46.0932
5051
4.178590.0171743
46.0932
5051
4.178590.0171743
46.0932
5051
4.178590.0171743
46.0932
5051
4.178590.0171743

``````print(mu, ", ", sigma2);
``````

Then once you have that you can decide if the integrals make sense or not

@bbbales2
I can do printing V[1] and `t[1], t[2], mu, sigma2` with looping over i, but not the stan(), then I updated my rstan package version as 2.21.1, then it is giving me such errors,

Why is that? I am struggling to have an output.

Compilation ERROR, function(s)/method(s) not created! C:/rtools40/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.3.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: file22a8da71e8b.o:file22a8da71e8b.cpp:(.text+0x9ac): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)' C:/rtools40/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file22a8da71e8b.o:file22a8da71e8b.cpp:(.text+0x18b7): undefined reference to `rstan::stan_fit::stan_fit(SEXPREC*, int)’
C:/rtools40/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.3.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: file22a8da71e8b.o:file22a8da71e8b.cpp:(.text+0x9ee): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)’