Dear all,
In my model, I need to compute an integral (using integrate_1d) with the same function with several different upper limits. But, I encountered with following error in rstan:
’
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
Expressions for elements of array must have the same or promotable types; found first element type=real; type at position 2=vector error in ‘model390c40e3ef1_Onicesco_interval_independentmodel_Log_logistic34744’ at line 70, column 74
70: log_integ[i]=log(1-integrate_1d(integrand, lb, ub[i],{ alpha, lambdaa[i]}, {0.0} , {0}));
71: }
'.
This is my codes in the RSTAN . Is there any idea how to solve this problem?
functions{
real integrand(real u, real xc, real[] theta, real[] x_r, int[] x_i)
{ // data (integer)
real df_dx = ((theta[2] *theta[1]*u^(theta[1]-1))/((1+(theta[2] *u^theta[1]))^2));
return(df_dx);
}
}
data {
int <lower=0> province;
int <lower=0> n_grid;
int <lower=0> N;
int <lower=0> num;
int <lower=0> number;
int <lower =0 , upper = province> county[N];
vector <lower=0> [province] p;
row_vector[n_grid] kernel[province];
matrix [N,number] respon;
real lb;
}
transformed data {
real x_r[0];
int x_i[0];
vector <lower=lb>[N] ub;
for (i in 1:N){
ub[i]=respon[i,4];
}
}
parameters{
vector [num] beta;
real <lower=0> sigma;
//real <lower=0> sigma1;
vector [n_grid] x;
}
transformed parameters{
vector [num] time_ratio;
vector [N] lambdaa;
real alpha = 1 / sigma;
vector [n_grid] exp_x;
vector[province] a; // `a` saved to output because it's a toplevel transformed parameter
vector[N] log_integ;
time_ratio = exp(beta);
exp_x = exp(x);
lambdaa = exp ((-1 * respon[,7:18] * beta) / sigma);
for (i in 1:N) {
log_integ[i]=log(1-integrate_1d(integrand, lb, ub[i],{ alpha, lambdaa[i]}, {0.0} , {0}));
}
{ // `z` not part of output
vector[province] landa;
for (k in 1 : province) {
landa[k] = kernel[k] * exp_x * p[k];
}
a = landa / sum(landa); // assign `a`
}
}
model{
vector [N] f;
vector [N] s;
target += normal_lpdf(x|0,5);
target += normal_lpdf(beta | 0, 1000);
target += gamma_lpdf(alpha | 0.001, 0.001);
for (i in 1:N) {
f[i]= a[county[i]]*((lambdaa [i]*alpha*respon[i,4]^(alpha-1))/((1+(lambdaa [i]*respon[i,4]^alpha))^2));
//s[i]= a[county[i]]*(1- ((lambdaa [i]*respon[i,4]^alpha)/ (1+(lambdaa [i]*respon[i,4]^alpha)))); s[i]= a[county[i]] * (log_integ[i]);
target += respon[i,6] * (log(f[i])-log(s[i])) + log(s[i]);
}
}
.```