I’m trying to model a mixture of truncated gaussians with fixed (known) means such that the data lies between lb and ub. Because I want to formulate this as a mixture, I don’t think the inbuilt T[lb,ub] syntax will work. Unfortunately, when I run this on simulated data the chains fail to converge. Oddly, even if I widen the range of the bounds so that the truncation should be irrelevant, the model still fails. If I run similar code for a mixture of normals but without allowing for truncation, I am able to fit appropriately simulated data. If I include only a single truncated normal, the model converges just fine, it’s only for 2 or more peaks that the inference fails. I have fixed means so I don’t think label switching will be a problem.
data{
int N;
int K;
vector[K] mu;
real lb;
real ub;
real<lower=lb, upper=ub> y[N];
}
parameters{
simplex[K] theta;
real<lower=0> sigma;
}
transformed parameters{
vector[K] ltheta = log(theta);
}
model{
sigma ~ normal(0.05, 0.02);
for (n in 1:N){
vector[K] lps = ltheta;
for (k in 1:K){
lps[k] += normal_lpdf(y[n]|mu[k], sigma) - log_diff_exp(
normal_lcdf(ub| mu[k], sigma),
normal_lcdf(lb| mu[k], sigma));
}
target += log_sum_exp(lps);
}
}