I have been facing this weird error on running vb() in RStan. My Stan model is as follows:
data {
int<lower=1> K; // num topics
int<lower=1> V; // num words
int<lower=0> D; // num docs
int<lower=0> n[D, V]; // word counts for each doc
// hyperparameters
vector<lower=0>[K] alpha;
vector<lower=0>[V] gamma1;
vector<lower=0>[V] gamma2;
vector<lower=0, upper=1>[V] delta;
}
parameters {
simplex[K] theta[D]; // topic mixtures
vector<lower=0,upper=1>[V] zeta[K]; // zero-inflated betas
}
transformed parameters {
vector<lower=0>[V] beta[K];
for (k in 1:K) {
beta[k,1] = zeta[k,1];
for (m in 2:V) {
beta[k,m] = zeta[k,m]*prod(1 - zeta[k,1:(m - 1)]); // stick breaking
}
}
for (k in 1:K) {
beta[k]=beta[k]/sum(beta[k,1:V]); // GD construction
}
}
model {
for (d in 1:D) {
theta[d] ~ dirichlet(alpha);
}
for (k in 1:K) {
for (m in 1:V) {
if (zeta[k,m]==0){ // Zero-inflated beta likelihood
target += bernoulli_lpmf(1 | delta[m]);
}else{
target += bernoulli_lpmf(0 | delta[m]) + beta_lpdf(zeta[k,m] | gamma1[m], gamma2[m]);
}
}
}
for (d in 1:D) {
vector[V] eta;
eta = beta[1] * theta[d, 1];
for (k in 2:K) {
eta = eta + beta[k] * theta[d, k];
}
eta = eta/sum(eta[1:V]);
n[d] ~ multinomial(eta); // generation of each sample
}
}
Now, as I run this in R using the following input data:
zinLDA_stan_data <- list(K = 8, V = ncol(X), D = nrow(X), n = X, alpha = rep(0.1, 8), gamma1 = rep(0.5, ncol(X)), gamma2 = rep(10,ncol(X)), delta = rep(0.52, ncol(X)))
stan.model <- stan_model(file = 'LGDAmodel.stan')
fit_zinLDA <- vb(stan.model, data=zinLDA_stan_data, algorithm="meanfield", iter=4000)
I encounter the following output:
Chain 1: ------------------------------------------------------------
Chain 1: EXPERIMENTAL ALGORITHM:
Chain 1: This procedure has not been thoroughly tested and may be unstable
Chain 1: or buggy. The interface is subject to change.
Chain 1: ------------------------------------------------------------
Chain 1:
Chain 1:
Chain 1:
Chain 1: Gradient evaluation took 0.045774 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 457.74 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1:
Chain 1:
Chain 1: Begin eta adaptation.
Chain 1: Iteration: 1 / 250 [ 0%] (Adaptation)
Chain 1: Iteration: 50 / 250 [ 20%] (Adaptation)
Chain 1: Iteration: 100 / 250 [ 40%] (Adaptation)
Chain 1: Iteration: 150 / 250 [ 60%] (Adaptation)
Chain 1: Iteration: 200 / 250 [ 80%] (Adaptation)
Chain 1: Iteration: 250 / 250 [100%] (Adaptation)
Chain 1: Success! Found best value [eta = 0.1].
Chain 1:
Chain 1: Begin stochastic gradient ascent.
Chain 1: iter ELBO delta_ELBO_mean delta_ELBO_med notes
Chain 1: 100 -68268478.213 1.000 1.000
Chain 1: 200 -34975639.064 0.976 1.000
Chain 1: 300 -21238607.967 0.866 0.952
Chain 1: 400 -14591251.173 0.764 0.952
Chain 1: 500 -11176187.978 0.590 0.647
Chain 1: 600 -9322193.373 0.402 0.456
Chain 1: 700 -8336422.815 0.270 0.306
Chain 1: 800 -7794480.066 0.173 0.199
Chain 1: 900 -7492810.776 0.107 0.118
Chain 1: 1000 -7339750.566 0.062 0.070
Chain 1: 1100 -7250413.009 0.036 0.040
Chain 1: 1200 -7195109.876 0.020 0.021
Chain 1: 1300 -7156785.229 0.012 0.012
Chain 1: 1400 -7127091.559 0.007 0.008 MEAN ELBO CONVERGED MEDIAN ELBO CONVERGED
Chain 1:
Chain 1: Drawing a sample of size 1000 from the approximate posterior…
Chain 1: COMPLETED.
Error in if (p$diagnostics$pareto_k > 1) { :
missing value where TRUE/FALSE needed
I can’t make out what this error means and what exactly is going wrong. Is there a way to swallow this error and still provide the posterior estimates?