Dear All,
I have been a Stan user for sometime now. However, in a recent project, I found myself struggling to pin down what is going on exactly behind the code. For example, consider the following model block, which models a two-stage model. My questions are in the comments below.
model{
// stage one
real mu1[n1];
real mu2[n2];
// stage two
real z_hat[N];
real zinit;
beta1 ~ multi_normal(bMu[1], bSig[1]);
beta2 ~ multi_normal(bMu[2], bSig[2]);
gamma ~ multi_normal(gMu, gSig);
//stage one:
for(i in 1:n1){
mu1[i] = beta1[1] + beta1[2]*logd1[i];
y1[i] ~ scaled_logit_normal_lpdf(mu1[i], std1, ymax1);
}
for(i in 1:n2){
mu2[i] = beta2[1] + beta2[2]*logd2[i];
y2[i] ~ scaled_logit_normal_lpdf(mu2[i], std2, ymax2);
}
//stage two:
for(i in 1:N){
zinit = log(y[i]/(ymax1-y[i]));
// Question 1: is it the posteriors of beta1 and beta2 that are used in stage 2 sampling??
z_hat[i] = newton_method(zinit, beta1, beta2, gamma, x_r[i]);
// Question 2: are the gamma's updated through z_hat[i]?
y[i] ~ scaled_logit_normal_lpdf(z_hat[i], sigma, ymax1);
}
}
For Question 1, to my understanding, in stage 1, when mu1[i] = beta1[1] + beta1[2]*logd1[i];
it means Stan has drawn values for beta1 from the prior and assign the computed value to mu1[i].
Then when y1[i] ~ scaled_logit_normal_lpdf(mu1[i], std1, ymax1);
it means that Stan is drawing from the joint posterior distribution of the beta1, beta2, std1, and ymax1. Correct? If so, then in stage 2, when beta1 and beta2 appear in newton_method()
, Stan is drawing gamma’s from its prior, conditioned on the posterior of beta1 and beta2 to solve for z_hat, right?
For Question 2, in y[i] ~ scaled_logit_normal_lpdf(z_hat[i], sigma, ymax1);
, Stan is drawing samples from the joint posterior of gamma and sigma conditioned on all of the stage 1 parameters. If that is correct, then gamma is getting updated through z_hat?
(Note: newton_method()
is a customized newton’s solver to solve for the mean (i.e. z_hat). And scale_logit_normal_lpdf()
is a customized function to sample the logit transform of y from a normal distribution.)
Can anybody please tell me if my understanding is correct? If not, can you help me understand what Stan is doing behind each line of these code conceptually?
Thanks in advance for your help!