# Problem with rejection of initial values in custom likelihood

This problem has me completely stumped. I wrote a likelihood based on a Gaussian copula with beta marginals. For now, I’m working on a 2-dimensional copula, so I only need a matrix of means (2 for each observation) `mu`, a vector of precisions `phi`, and a correlation parameter `rho`. This is the function:

``````real gcbm_lpdf (matrix y, matrix mu, vector phi, real rho) {
// Variable declarations
int N = rows(y);
int D = cols(y);
real a;
real b;
vector[D] z;
vector[D] ldy;

// Log-likelihood
real r2 = square(rho);
real ldr = log1m(r2);
real rr2 = r2/(1 - r2);
vector[N] ll;
for (i in 1:N) {
for (j in 1:D) {
a = mu[i, j]*phi[j];
b = (1 - mu[i, j])*phi[j];
z[j] = inv_Phi(inc_beta(a, b, y[i, j]));
ldy[j] = (a - 1)*log(y[i, j]) + (b - 1)*log1m(y[i, j]) - lbeta(a, b);
}
ll[i] = -0.5*(ldr + rr2*(square(z) - 2*z*z/rho + square(z))) + sum(ldy);
}
return sum(ll);
}
``````

The means I obtain for a particular model and since they must lie between 0 and 1, I use the following (an almost ideal demand system):

``````matrix aid (vector e, matrix p, real alpha0, row_vector alpha, matrix gamma, row_vector[] beta, int trm) {
// Variable declarations
int N = rows(p);
int d = cols(p);
int D = d - 1;
real elap;
matrix[trm, d] sVec;
matrix[N, d] mu;

// Mean computation
matrix[N, d] pg = p*gamma;
for (i in 1:N) {
elap = e[i] - alpha0 - dot_product(p[i], alpha) - 0.5*quad_form(gamma, p[i]');
for (r in 1:trm) {
sVec[r] = beta[r]*pow(elap, r);
}
mu[i] = alpha + pg[i] + rep_row_vector(1, trm)*sVec;
}
return mu[, :D];
}
``````

My big issue is that I get the following error every time I try to sample from this model:

``````Chain 1: Rejecting initial value:
Chain 1:   Error evaluating the log probability at the initial value.
Chain 1: Exception: Exception: Error in function boost::math::ibeta<long double>(long double, long double, long double): The argument a to the incomplete beta function must be >= zero (got a=-185.490376487676513761).  (in 'Code/Stan/Functions.stan' at line 71; included from 'model29609967fdf_Gaussian_Beta_AID' at line 1)
(in 'model29609967fdf_Gaussian_Beta_AID' at line 47)
``````

However, I have checked using R, `expose_stan_functions()`, and the `generated quantities` block that I get a valid likelihood using exactly this function and the initial parameter values I supply. Does anyone have any insight how might I debug this issue? I’ve tried everything and it is the first time I’m running into this problem after successfully using Stan several times.

Edit: I should have added that since the parameters are either centered or unit-sum vectors, I supply initial values for the raw parameters and then obtain the full parameters in the `transformed parameters` block. Here is the full model just in case (right now the priors are extremely tight because I thought that might help but that will change in the actual estimation):

``````data {
int N;
int D;
int d;
int dg;
int trm;
matrix[N, D] y;
vector[N] e;
matrix[N, d] p;
}
parameters {
real<lower=0> a0;
row_vector<lower=0>[D] a;
row_vector<upper=0>[D] b[trm];
vector[dg] g;
vector<lower=0>[D] phi;
real<lower=-1, upper=1> rho;
}
transformed parameters{
row_vector[d] alpha;
matrix[d, d] gamma;
row_vector[d] beta[trm];

alpha = append_col(a, 1 - sum(a));
gamma = g_to_gamma(g); // Transform parameter vector to symmetric matrix
for (r in 1:trm) {
beta[r] = append_col(b[r], 0-sum(b[r]));
}
}
model {
matrix[N, D] mu;

// Priors
a0 ~ normal(1, 0.1);
a ~ normal(0.25, 0.01);
a ~ normal(0.25, 0.01);
g ~ normal(0, 0.01);
for (r in 1:trm) {
to_vector(b[r]) ~ normal(0, 0.01);
}
phi ~ gamma(10, 1);
rho ~ uniform(-1, 1);

// Likelihood
mu = aid(e, p, a0, alpha, gamma, beta, trm);
y ~ gcbm(mu, phi, rho);
}
``````

Are those warnings from warmup period or from sampling period?

Do you give `inits` for the sampling call?

They are from before the warmup period starts, as I cannot get the sampling started due to an error in the initial values. I am passing them through `inits` via the function method, as I perturbate some initial values that I have found give a finite likelihood. However, even if I pass the regular values, it still does prints that same error. I believe they must be related to the values of what I call `b` in the model. In the `expose_stan_functions()` it works only when I pass them as lists of row vectors, so this is how I pass them to `inits`.