# Need for adjustment regarding Jacobian warning?

Hi. When running my Stan code I receive “Parser warning” related to the “Jacobian warning”. I have used the following page: http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup to investigate the potential error, but as far as I can see, the gradient of the transformation regarding Z is equal to zero. It that correct? Or have I misunderstood something? Code is given below:

functions {
//Multivariate skewed t-distribution (Sahu, Dey & Branco, 2003)
real MskT_lpdf(real z, real nu, real xi){
real a = (tgamma((nu-1)/2)*sqrt(nu-2))/(sqrt(pi())*tgamma(nu/2))*(xi-1/xi);
real b = sqrt(pow(xi,2)+1/pow(xi,2)-1-pow(a,2));
real k = (-a/b >= z ? (b*z+a)*xi : (b*z+a)/xi);
return log(2*b/(xi+1/xi)) + lgamma((nu+1)/2)-(log(sqrt(pi()*(nu-2)))+lgamma(nu/2))-((nu+1)/2)*log(1+(pow(k,2)/(nu-2)));
}
}

data {
int<lower=0> T;                               //number of observations
real r[T];                                    //return data - notice, cannot med -100%, as this will results in negative prices
real<lower=0> sigma1;                         //First sigma
real omg_p;
real omg_q;
real psi_p;
real psi_q;
real alpha_q;
real alpha_p;
real lam_p;
real lam_q;
real mu_mu;
real mu_sigma;
real nu_p;
real nu_q;
real xi_p;
real xi_q;
}

parameters {
real mu;
real<lower=0,upper=1> omg;                    //Cannot be negative to ensure positive variance
real<lower=0,upper=1> alpha;                  //Cannot be negative to ensure positive variance
real<lower=0, upper=1> psi;                   //Cannot be negative to ensure positive variance
real<lower=0, upper=1> lam;                   //Cannot be negative to ensure positive variance
real<lower = 4> nu;
real<lower = 0> xi;
}

transformed parameters{
real<lower=0> sigma[T];                       //Lower limit as it cannot be negative
real<lower=0, upper=(1-alpha-psi/2)> bet;     //Upper limit to ensure stationarity
real inn[T];
sigma[1] = sigma1;
bet = lam - alpha - psi/2;
inn[1] = (r[1]-mu) / sigma[1];

for (t in 2:T){
sigma[t] = sqrt(omg + (alpha + psi*step(mu-r[t - 1]))*pow(r[t - 1] - mu,2) + bet*pow(sigma[t-1],2));
inn[t] = (r[t]-mu)/sigma[t];
}

}

model {
//Data distribution - model
for(t in 1:T){
inn[t]~MskT(nu,xi);
}

//prior distributions
omg~beta(omg_p, omg_q);
psi~beta(psi_p, psi_q);
alpha~beta(alpha_p, alpha_q);
lam~beta(lam_p, lam_q);
mu~normal(mu_mu, mu_sigma);
nu~normal(nu_p, nu_q);
xi~normal(xi_p, xi_q);
}

[edit: escaped code]

If the log Jacobian is zero, you can ignore it. If the actual Jacobian is zero, you have problems in that you’re probably mapping to something that’s not of the appropriate dimensionality (e.g., mapping (x,y) → (x/y, 0) as a lot of people seem to want to do).

Where you are going to need a Jacobian adjustment is for inn.