Chiming in late here. Maybe I’m misunderstanding something, but I wonder if the log(.9995)
/log(.0001)
bit might be an issue. I agree with @paul.buerkner’s thinking that looking at the examples of zero-inflated models might be helpful here. For 6-inflation on an ordinal scale, couldn’t one do:
for (n in 1:N) {
if (y[n] == 6)
target += log_sum_exp(bernoulli_lpmf(1 | theta),
bernoulli_lpmf(0 | theta)
+ ordered_logistic_lpmf(y[n] | gamma, cutpoints));
else
target += bernoulli_lpmf(0 | theta)
+ ordered_logistic_lpmf(y[n] | gamma, cutpoints);
}
In which case I think the appropriate shorthand function for incrementing the target would be:
real rec_dist_lpmf(int y, real gamma, vector cutpoints) {
if(y == 6){
return(log_sum_exp(bernoulli_lpmf(1 | theta),
bernoulli_lpmf(0 | theta)
+ ordered_logistic_lpmf(y[n] | gamma, cutpoints)));
} else {
return(bernoulli_lpmf(0 | theta)
+ ordered_logistic_lpmf(y[n] | gamma, cutpoints));
}
}
No?