 # Variational inference in Rstan with errors

Hello Guys,

I am a very newer here, I have trie to build my own variational inference algorithm in pure R without any package help, however my parameters were very strange at the end of iterations and I had to change.
I am now trying to use the package rstan to help me with that, however when I try to fit the model, some errors occurs and I really need to understand where the problem is.

I will share with you guys, my entire data, stan file and the model I am working.

data {

int<lower=0> N; // Number of observations
int<lower=0> P; // AR model order
int<lower=0> n_u; // Number of lost samples
}

transformed data {

real<lower=0> beta = 0.001; //global beta
real<lower=0> alpha = 0.001; //global alpha
}

parameters {

vector[n_u] x_u; // lost samples vector
real<lower=0> sigma_e; #innovation error
vector[P] a;	//coefficients vector
}

model {

vector[N] x; // vector with all samples
matrix[N-P, P] matriz_X; //Matrix X
vector[N-P] x_1; //Vector x1
real p;  // related with likelihood

for (n in 1:10)
x[400 + n] = x_u[n]; // Replace the lost samples sampled  on position from 401 to 410 on vector x.

for (k in 1:P-1)
matriz_X[, P-k] = x[(k+1):(N-P+k)]; // Building matrix X

for (j in P+1:N)  //Building the  vector x1 with vector x  samples   from  P+1 to N
for (m in 1:N-P)
x_1[m] = x[j];

//no need to de declared improper priors  (x_u and a proportional 1)
sigma_e ~ inv_gamma(alpha, beta);  // innovation error prior

// likelihood
p = exp((-(x_1-matriz_X*a)'*(x_1-matriz_X*a))/2*sigma_e)/(2*pi()*sigma_e)^((N-P)/2.0);

}


Here is my R enviroment:

set.seed(1)

# y auxiliar to simulate data
y <- runif(1000, -1, 1)

#known samples + lost samples
c <- matrix(y, ncol =1)

#Fit AR(40) model
ar_model <- ar(c, FALSE, 40)

#Fix coefficients of AR(40) model
list1 <- ar_model$ar #Simulate 1000 (N = 1000) samples from AR(40) model with fixed coefficients x <- arima.sim(model = list(ar = list1), n = 1000) #Collect 10 samples (size = 10) from x as we know the position of lost samples list2 <- x[c(401:410)] N <- length(x) #Number of observations P <- length(list1) #AR model order n_u = length(list2) # Number of lost samples list3 = 1 # sigma_e = 1 (innovation error) # save the above model to a file and compile it model <- stan_model(file = 'first.stan') # data list stan_dat <- list(N=N, P=P, n_u=n_u, x=x) #Fit using variational bayes fit <- vb(model, data = stan_dat, init = c(x_u = list1, a = list2, sigma_e = list3), algorithm = "meanfield", check_data = TRUE, output_samples = 100, adapt_iter = 50, refresh = FALSE, seed = 1)  This is the error Error in sampler$call_sampler(c(args, dotlist)) :
Expecting a single string value: [type=character; extent=51].

Here you can see my model, its structure is very close to Normal, however there is a bad dependence between vector a and matrix X
p_E(\textbf{x},\textbf{a},\sigma^2) = \frac{1}{{(2 \pi\sigma^2_e)^{\frac{N-P}{2} + \alpha + 1}}} \exp\{-\frac{1}{2{\sigma^2}_e}((x_1 - Xa )^T(x_1 - Xa )+ \beta)\}

\mathbf{X}=\left[\begin{array}{ccccccc} x_P & x_{P-1} & \cdots & \cdots & x_2 & x_1 \\ x_{P+1} & x_P & \cdots & \cdots & x_3 & x_2 \\ \vdots & \ddots & \ddots & \ddots & \ddots & \vdots \\ x_{N-2} & x_{N-3} & \cdots & \cdots & x_{N-P} & x_{N-P-1} \\ x_{N-1} & x_{N-2} & \cdots & \cdots & x_{N-P+1} & x_{N-P} \end{array}\right]

It seems you have error in one of the vb() arguments. Try with minimal arguments to find out which argument has the error.