Hi all,
This may not be a Stan-specific question, (and maybe very basic) but I hope the community is still able to help.
I want to estimate two linear regression parameters (intercept, \alpha and slope, \beta) by partially pooling information from exchangeable groups. I understand, conceptually at least, the process of using a vector to collect separate group estimates and specifying a shared prior model to link them.
I have only ever seen examples of this global prior being normally distributed, with two hyperparameters (mean, \mu and standard deviation, \sigma). Here \sigma describes the variability between groups, with very low values approaching fully pooled models and very high values approaching a set of independent models.
I am interested in the case where \beta should be constrained to be positive.
I, therefore, wanted to use an exponential (global) prior. Now that the mean and variance would no longer independent, I wondered how the single distribution parameter controls the extent of pooling?
In the below extracts:
- I first used a normal global prior (with
<lower = 0>
in the parameters block), which appears to work as expected. - I then tried to use an exponential global prior for (for which I have tried many different models for
rate_beta
and I do not see any regression to the population mean, or reduced uncertainty in the marginal posterior.
I wanted to check if there was a fundamental issue with non-Gaussian hierarchical priors?
Standard example, with a normal global prior (works well!)
model {
z ~ normal(alpha[group] + beta[group].* x, sigma)
// Hierarchical Priors
alpha ~ normal(mu_alpha, sigma_alpha);
beta ~ normal(mu_beta, sigma_beta);
// Hyperpriors
mu_alpha ~ normal(0, 1);
sigma_alpha ~ exponential(1);
mu_beta ~ normal(0, 1);
sigma_beta ~ exponential(1);
// Remaining Priors
sigma ~ exponential(1);
...
}
Exponential prior for Beta - doesn’t appear to be pooling
model {
z ~ normal(alpha[group] + beta[group].* x, sigma)
// Hierarchical Priors
alpha ~ normal(mu_alpha, sigma_alpha);
beta ~ exponential(rate_beta);
// Hyperpriors
mu_alpha ~ normal(0, 1);
sigma_alpha ~ exponential(1);
rate_beta ~ exponential(1);
// Remaining Priors
sigma ~ exponential(1);
...
}
Thanks all!