While working with truncated distributions, I noticed that the target
log density output (lp__) differs depending on whether a lower bound constraint
is specified for a parameter or not, even if the shape of the
distribution remains more or less unchanged.
For example, if a parameter is specified as coming from a
scaled_inv_chi_square(5, 1), the resulting lp__ differs depending on
whether <lower=0> is specified for the parameter.
Also, when there is a lower bound, the lp__ differs from ‘manually’
generated lp (specified in the generated quantities block), but this
is not the case when there is no lower bound.
I was wondering why this discrepency occurs and whether it is intended
behaviour?
Stan code:
parameters {
real sigma;
// OR real sigma<lower=0>;
}
model {
target += scaled_inv_chi_square_lpdf(sigma | 5, 1);
}
generated quantities {
real gen_lp;
gen_lp = scaled_inv_chi_square_lpdf(sigma | 5, 1);
}
Draws summary:
# no lower bound
mean se_mean sd n_eff Rhat
sigma 1.678592 0.04436190 2.345639 2795.773 1.003143
gen_lp -1.243732 0.02225399 1.246196 3135.859 1.002770
lp__ -1.243732 0.02225399 1.246196 3135.859 1.002770
# <lower=0> on sigma
mean se_mean sd n_eff Rhat
sigma 1.696977 0.022947537 2.3487140 10475.82 1.000356
gen_lp -1.256868 0.011323521 1.2504616 12194.89 1.000206
lp__ -1.033168 0.007030302 0.7664612 11885.91 1.000221